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

头文件中的声明,实现了UIPickerViewDelegate,UIPickerViewDataSource协议:
1
2
3
4
5
6
<code>@interface</code> <code>ViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource></code>
<code>@property</code> <code>(weak, </code><code>nonatomic</code><code>) </code><code>IBOutlet</code> <code>UIPickerView *pickView;</code>
<code>@property</code> <code>(weak, </code><code>nonatomic</code><code>) </code><code>IBOutlet</code> <code>UITextField *areaTextField;</code>
<code>@end</code>
定义存储数据的数组:
<code>@interface</code> <code>ViewController ()</code>
<code>{</code>
<code> </code><code>NSArray</code> <code>*areaArr;</code>
<code> </code><code>NSMutableArray</code> <code>*teamArr;</code>
<code>}</code>
初始化数据:
7
8
9
10
11
12
<code>- (</code><code>void</code><code>)viewDidLoad {</code>
<code> </code><code>[</code><code>super</code> <code>viewDidLoad];</code>
<code> </code><code>// Do any additional setup after loading the view, typically from a nib.</code>
<code> </code><code>areaArr=@[@</code><code>"西南区"</code><code>,@</code><code>"中央区"</code><code>,@</code><code>"东南区"</code><code>,@</code><code>"大西洋区"</code><code>,@</code><code>"西北区"</code><code>,@</code><code>"太平洋区"</code><code>];</code>
<code> </code><code>teamArr=[[</code><code>NSMutableArray</code> <code>alloc] init];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"马刺"</code><code>,@</code><code>"灰熊"</code><code>,@</code><code>"小牛"</code><code>,@</code><code>"火箭"</code><code>,@</code><code>"鹈鹕"</code><code>]];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"活塞"</code><code>,@</code><code>"步行者"</code><code>,@</code><code>"骑士"</code><code>,@</code><code>"公牛"</code><code>,@</code><code>"雄鹿"</code><code>]];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"热火"</code><code>,@</code><code>"魔术"</code><code>,@</code><code>"老鹰"</code><code>,@</code><code>"奇才"</code><code>,@</code><code>"黄蜂"</code><code>]];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"凯尔特人"</code><code>,@</code><code>"76人"</code><code>,@</code><code>"尼克斯"</code><code>,@</code><code>"篮网"</code><code>,@</code><code>"猛龙"</code><code>]];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"森林狼"</code><code>,@</code><code>"掘金"</code><code>,@</code><code>"爵士"</code><code>,@</code><code>"开拓者"</code><code>,@</code><code>"雷霆"</code><code>]];</code>
<code> </code><code>[teamArr addObject:@[@</code><code>"国王"</code><code>,@</code><code>"太阳"</code><code>,@</code><code>"湖人"</code><code>,@</code><code>"快船"</code><code>,@</code><code>"勇士"</code><code>]];</code>
设置PickerView的列数:
<code>- (</code><code>NSInteger</code><code>)numberOfComponentsInPickerView:(UIPickerView *)pickerView{</code>
<code> </code><code>return</code> <code>2;</code>
返回行数:
<code>- (</code><code>NSInteger</code><code>)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(</code><code>NSInteger</code><code>)component{</code>
<code> </code><code>//判断列</code>
<code> </code><code>if</code> <code>(component==0) {</code>
<code> </code><code>return</code> <code>[areaArr count];</code>
<code> </code><code>}</code><code>else</code><code>{</code>
<code> </code><code>//判断0列中当前的行号</code>
<code> </code><code>NSInteger</code> <code>currentRow=[pickerView selectedRowInComponent:0];</code>
<code> </code><code>return</code> <code>[teamArr[currentRow] count];</code>
<code> </code><code>}</code>
设置每行每列中的数据:
<code>- (</code><code>NSString</code> <code>*)pickerView:(UIPickerView *)pickerView titleForRow:(</code><code>NSInteger</code><code>)row forComponent:(</code><code>NSInteger</code><code>)component{</code>
<code> </code><code>//o列从区域数组中选择</code>
<code> </code><code>return</code> <code>areaArr[row];</code>
<code> </code><code>//根据0列中选择的行号</code>
<code> </code><code>return</code> <code>teamArr[currentRow][row];</code>
选择完成之后的事件:
<code>- (</code><code>void</code><code>)pickerView:(UIPickerView *)pickerView didSelectRow:(</code><code>NSInteger</code><code>)row inComponent:(</code><code>NSInteger</code><code>)component{</code>
<code> </code><code>[pickerView reloadComponent:1];</code>
<code> </code><code>NSInteger</code> <code>areaRow=[pickerView selectedRowInComponent:0];</code>
<code> </code><code>NSInteger</code> <code>teamRow=[pickerView selectedRowInComponent:1];</code>
<code> </code><code>[_areaTextField setText:[</code><code>NSString</code> <code>stringWithFormat:@</code><code>"%@-%@"</code><code>,areaArr[areaRow],teamArr[areaRow][teamRow]]];</code>
<code> </code>
具体效果如下:
本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4245884.html,如需转载请自行联系原作者