UIpickerView的使用

本文介绍了如何自定义UIPickerView,并实现下拉选择框的功能。包括设置数据源、代理方法,以及如何设置UITextField的inputView和inputAccessoryView。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UIpickerView类似于UItableView,使用方法非常相似;
自定义MJPickerView,继承自UIpickerView;遵守两个协议:UIPickerDataSource和UIPickerDelegate;设置数据源和代理;

1、两个数据源方法

    1、此方法返回的是列数
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView      *)pickerView{
         return 2;
}
    2、此方法返回的是每一列的行数
    - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
if (component == 0) {
        return _listOne.count;
}
        return _listTwo.count;
    }

2、代理方法:

    1、设置每列宽度
    - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
if (self.listTwo) {
    if (component == 1) {
        return [UIScreen mainScreen].bounds.size.width - 120;
    }
    return 120;
}
return [UIScreen mainScreen].bounds.size.width;
}
2、设置每一列的每一行的显示数据,如果不实现这个代理方法,效果如下图所示:
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (component == 0) {
    return [_listOne objectAtIndex:row];
} else {
    return [_listTwo objectAtIndex:row];
    }
}
    3、获取选中的行列,得到数组中的数据
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

if (component == 0) {
    _selectedStrFromOneList = [_listOne objectAtIndex:row];

} else {
    _selectedStrFromTwoList = [_listTwo objectAtIndex:row];
}

}

没有实现titileForRow这个代理方法的效果:

没有实现titileForRow这个代理方法的效果

3、设置为UITextField的inputView

    self.cellTextFld.inputView = self.pickerV;

4、自定义toolBar,设置为UITextField的inputAccessoryView

    UIBarButtonItem *cancelItem = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(resignFirResponder)];
    //占位用
    UIBarButtonItem *selectItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
    UIBarButtonItem *doneItem = [[UIBarButtonItem alloc] initWithTitle:@"确定" style:UIBarButtonItemStyleDone target:self action:@selector(complete)];
UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    [toolBar setItems:@[cancelItem,selectItem,doneItem]];
     self.cellTextFld.inputAccessoryView = toolBar;

剩下的数据传递了,就非常简单了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值