UIPickerView开发一般选择区域或者分级数据的时候会使用到,类似于前端中用到树状结构,不过PC上一般都是从上到下的分级,使用UIPickView是从左到右实现,可以动态的设置UIPickView中中行列数据,将结果显示在文本输入框里,简单的定义一下数据源。通过声明协议捕获事件,展示结果,比较简单,进入正题.
页面布局
页面布局比较简单,一个UIPickerView,一个文本框:
头文件中的声明,实现了UIPickerViewDelegate,UIPickerViewDataSource协议:
1
2
3
4
5
6
|
@interface
ViewController : UIViewController <UIPickerViewDelegate,UIPickerViewDataSource>
@property
(weak,
nonatomic
)
IBOutlet
UIPickerView *pickView;
@property
(weak,
nonatomic
)
IBOutlet
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,如需转载请自行联系原作者