绘艺素材网
主页 > 脚本代码 > iphone中如何实现下拉菜单

iphone中如何实现下拉菜单

iphone中如何实现下拉菜单
iPhone 中的下拉菜单,或者说选择器一般演变成了Picker,或者UIActionSheet,而前者虽然使用方便,但是占据了非常大的屏幕空间,无法调整。而后者占据空间也很大,而且使用非常受限,垂直方向只能加6个选项,水平方向只能加4个选项,而且如果自定义控件的话,必须至少有一个默认按钮存在,否则加在上面的自定义控件将无法响应操作,当然你可以自定义一个自己的ActionSheet.
1.创建一个触发控件:
_selectSegment = [[UISegmentedControl alloc]initWithFrame:CGRectMake(x,y,length,height)]; 
[_selectSegment insertSegmentWithImage:[UIImage imageNamed:@"current.png"] atIndex:0 animated:YES]; 
_selectSegment.segmentedControlStyle = UISegmentedControlStyleBar; 
[_selectSegment addTarget:self action:@selector(selectSegmentAction:)forControlEvents:UIControlEventValueChanged];   
[self.navigationController.navigationBar addSubview:_selectSegment]; 
[_selectSegment release]; 
_selectSegment.selectedSegmentIndex = -1; 
这一段就是创建一个segment的控件,然后加在NavigationBar上面,将它的UIControlEventValueChanged事件绑定到selectSegmentAction:上面。So,我们点击这个segment后,就会触发selectSegmentAction:,
2.创建一个UITableView作为下拉框:
/*
@property (nonatomic, retain) NSArray *comboBoxDatasource;
@synthesize comboBoxDatasource ;
*/ 
_comboBoxTableView = [[UITableView alloc] initWithFrame:CGRectMake(x,y,length,height) style:UITableViewStylePlain]; 
_comboBoxTableView.dataSource = self; 
_comboBoxTableView.delegate = self; 
_comboBoxTableView.backgroundColor = [UIColor clearColor]; 
_comboBoxTableView.separatorColor = [UIColor clearColor]; 
_comboBoxTableView.hidden = YES; 
[self.view addSubview:_comboBoxTableView]; 
[_comboBoxTableView release];   
self.comboBoxDatasource = [[NSArray alloc] initWithObjects:@"1th", @"2th", @"3th",nil];
  这里呢就是创建一个UITableView加在self.view上面,当然你可以加在window上面:
UIWindow* window=[[UIApplication sharedApplication] keyWindow];  
[window addSubview:_comboBoxTableView];  
一般情况下呢,还需要为其添加一个背景色(图片)
_tableViewImageView = [[UIImageView alloc] initWithFrame:CGRectMake(x,y,length,height)];  
[_tableViewImageView setImage:[UIImage imageNamed:@"comboxBackGround.png"]];  
[self.view addSubview:_tableViewImageView];    
[_tableViewImageView release]; 
[_tableViewImageView setHidden:YES]; 
位置当然需要慢慢调整,图层当然是放在tableview 的下面了
3.tableView的数据
#pragma mark - 
#pragma mark UITableViewDelegate and UITableViewDatasource methods 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [comboBoxDatasource  count]; 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{         
    return 1; 

- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section  
{         
    return nil; 
}  
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 

    UILabel *label = [[[UILabel alloc] initWithFrame:CGRectMake(0.0f,0.0f, 120.0f,20.0f)]autorelease];   
    label.backgroundColor = [UIColor clearColor]; 
        label.text = @"Picture setting"; 
        label.textColor = [UIColor grayColor]; 
        label.font =  [UIFont systemFontOfSize:10]; 
        label.textAlignment = UITextAlignmentCenter;   
    return label; 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"CellIdentifier";     
    UITableViewCell *cell = [_comboBoxTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) {         
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    cell.textLabel.text = (NSString *)[comboBoxDatasource objectAtIndex:indexPath.row]; 
    cell.textLabel.font = [UIFont systemFontOfSize:12.0f]; 
    cell.textLabel.textColor = [UIColor whiteColor]; 
    [cell setAlpha:1.0f]; 
    if(indexPath.section == 0){         
        if(indexPath.row == 0){                
             
        }else if(indexPath.row == 1){                
                
        }else if(indexPath.row == 2){                 
             
        }  
    }        
    cell.accessoryType = UITableViewCellAccessoryNone; 
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;      
    return cell; 

  
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {         
    return 20.0f; 

  
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {         
    [self hidden]; 
        [self selectedAction:indexPath.row]; 
        [comboBoxTableView reloadData]; 

4.tableView的动作:
#pragma mark - 
#pragma mark combox action methods 
  
//If a row selected ,this function will go. 
- (void)selectedAction:(int)index {          
    switch (index) { 
            case 0:                       
            break;       
        case 1:                 
            break; 
        case 2: 
            break; 
                
        default: 
            break;        
        } 

  
//comboBox show ,and _showComboBox is it's flag that means current status 
- (void)comboBoxShow {         
    _comboBoxTableView.hidden = NO;         
    _showComboBox = YES;         
    [_tableViewImageView setHidden:NO]; 

  
//hidden comboBox whenever if this function called. 
- (void)comboBoxHidden {         
    _comboBoxTableView.hidden = YES;         
    _showComboBox = NO;         
    [_tableViewImageView setHidden:YES]; 

5.总之,最后我们添加一个事件,在点击屏幕其它地方的时候就把空上下拉框给Hiden起来。以上我们的控件都是加在UIView上面的,我们需要把uiview改成UIControl 。这样子就可以响应事件了。
[contentView addTarget:self action:@selector(backgroundTap:)
forControlEvents:UIControlEventTouchDown];
在backgroundTap里面就直接调用comboBoxHidden 就OK了。至此,基于的下拉菜单就大功告成了。

iphone菜单 下拉菜单 JS格式
立即下载本素材 “关注公众号,送价值699元超级大礼包”
二维码
iphone微信MMAlert(半透明底部弹出菜单)
iphone微信MMAlert(半透明底部弹出菜单)
iphone 实现下拉菜单
iphone 实现下拉菜单

猜你喜欢

热门标签

相关专题

同类内容