iOS开发-数据选择UIPickerView

十度 IOS 2015年12月01日 收藏

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

页面布局

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

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

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

 Demo实现

定义存储数据的数组:

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

初始化数据:

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

设置PickerView的列数:

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

返回行数:

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

 设置每行每列中的数据:

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

 选择完成之后的事件:

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

 具体效果如下: