pickerView
1.UIPickView什么时候用?
通常在注册模块,当用户需要选择一些东西的时候,比如说城市,往往 弹出一个PickerView给他们选择。
老虎机效果
2.UIPickView常见用法,演示实例程序
1>独立的,没有任何关系 =>菜单系统。
2>相关联的,下一列和第一列有联系=>省会城市选择
3>图文并帽,=>国旗选择。
// 点击随机的时候调用
- (IBAction)random:(UIButton *)sender {
// pickerView每一列随机选中一行
// 随机选中的文字展示到label
for (int i = 0; i < 3; i++) {
// 假设让第0列随机选中一行
// 取出第0列的行数
NSInteger count = [self.foods[i] count];
int random = arc4random_uniform((u_int32_t)count);
// 不会触发代理的选中方法
[_pickerView selectRow:random inComponent:i animated:YES];
// 主动给label赋值
[self pickerView:nil didSelectRow:random inComponent:i];
}
}
- (NSArray *)foods
{
if (_foods == nil) {
// 加载Pilst文件
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"foods.plist" ofType:nil];
// 大数组:pickerView有多少列
_foods = [NSArray arrayWithContentsOfFile:filePath];
}
return _foods;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.pickerView.delegate = self;
// 初始化label标题
for (int i = 0; i < 3; i++) {
[self pickerView:nil didSelectRow:0 inComponent:i];
}
}
// 返回pickerView有多少列
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return self.foods.count;
}
// 返回第component列有多少行
- (NSInteger)r :(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return [self.foods[component] count];
}
// 返回第component列第row行的标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return self.foods[component][row];
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 45;
}
// 给label赋值
// 选中第component列第row行的时候调用
// 注意:这个方法必须用户主动拖动pickerView,才会调用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
switch (component) {
case 0:
// 设置水果
_frultLabel.text = self.foods[component][row];
break;
case 1:
// 设置主食
_mainLabel.text = self.foods[component][row];
break;
case 2:
// 设置饮料
_drinkLabel.text = self.foods[component][row];
break;
}
}