iOS开发-数据选择UIPickerView

本文介绍如何使用UIPickerView实现区域和分级数据的选择功能。通过实例展示了如何设置数据源、配置列数及行数,并实现联动效果。同时,还介绍了如何在选定后更新文本框的内容。

UIPickerView开发一般选择区域或者分级数据的时候会使用到,类似于前端中用到树状结构,不过PC上一般都是从上到下的分级,使用UIPickView是从左到右实现,可以动态的设置UIPickView中中行列数据,将结果显示在文本输入框里,简单的定义一下数据源。通过声明协议捕获事件,展示结果,比较简单,进入正题.

页面布局

页面布局比较简单,一个UIPickerView,一个文本框:

头文件中的声明,实现了UIPickerViewDelegate,UIPickerViewDataSource协议:

1
2
3
4
5
6
@interface ViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>
 
@property (weak, nonatomicIBOutlet UIPickerView *pickView;
@property (weak, nonatomicIBOutlet UITextField *areaTextField;
 
@end

 Demo实现

定义存储数据的数组:

1
2
3
4
5
@interface ViewController ()
{
   NSArray *areaArr;
   NSMutableArray *teamArr;
}

初始化数据:

1
2
3
4
5
6
7
8
9
10
11
12
- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    areaArr=@[@"西南区",@"中央区",@"东南区",@"大西洋区",@"西北区",@"太平洋区"];
    teamArr=[[NSMutableArray alloc] init];
    [teamArr addObject:@[@"马刺",@"灰熊",@"小牛",@"火箭",@"鹈鹕"]];
    [teamArr addObject:@[@"活塞",@"步行者",@"骑士",@"公牛",@"雄鹿"]];
    [teamArr addObject:@[@"热火",@"魔术",@"老鹰",@"奇才",@"黄蜂"]];
    [teamArr addObject:@[@"凯尔特人",@"76人",@"尼克斯",@"篮网",@"猛龙"]];
    [teamArr addObject:@[@"森林狼",@"掘金",@"爵士",@"开拓者",@"雷霆"]];
    [teamArr addObject:@[@"国王",@"太阳",@"湖人",@"快船",@"勇士"]];
}

设置PickerView的列数:

1
2
3
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
    return 2;
}

返回行数:

1
2
3
4
5
6
7
8
9
10
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
    //判断列
    if (component==0) {
        return [areaArr count];
    }else{
        //判断0列中当前的行号
        NSInteger  currentRow=[pickerView selectedRowInComponent:0];
        return [teamArr[currentRow] count];
    }
}

 设置每行每列中的数据:

1
2
3
4
5
6
7
8
9
10
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
    if (component==0) {
        //o列从区域数组中选择
        return areaArr[row];
    }else{
        //根据0列中选择的行号
        NSInteger  currentRow=[pickerView selectedRowInComponent:0];
        return teamArr[currentRow][row];
    }
}

 选择完成之后的事件:

1
2
3
4
5
6
7
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
    [pickerView reloadComponent:1];
    NSInteger areaRow=[pickerView selectedRowInComponent:0];
    NSInteger teamRow=[pickerView selectedRowInComponent:1];
    [_areaTextField setText:[NSString stringWithFormat:@"%@-%@",areaArr[areaRow],teamArr[areaRow][teamRow]]];
     
}

 具体效果如下:

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4245884.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值