IOS 开发之PickerView文字和随机数的使用
PickerView用于展示供选择的内容(例如日期选取、点菜等)。
有三种情况:
1.每一列都是独立的选取
2.右边的列受到左边列的影响
3.包含图片
PickerView和TableView类似,通过数据源来显示数据,与TableView同样地,让控制器称为其数据源。
但是PickerView的数据源仅仅提供行数和列数,在代理方法内才能设置内容。
通过两个数据源方法设置行和列数,通过一个代理方法来设定内容,注意component表示第几列:
这里的foods成员是一个复合数组,即NSArray内又有多个NSArray,每个内层的NSArray中放着一个类型的食物,不同内层NSArray之间代表不同类型的食物。
要得到这样的复合数组,可以直接建立,例如:
1
|
@[@[...],@[...],@[...]];
|
或者通过plist读取
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#pragma mark - PickerView数据源方法
// returns the number of 'columns' to display.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return self.foods.count;
}
// returns the # of rows in each component..
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
NSArray *foodArray = self.foods[component]; // component是列
return foodArray.count;
}
#pragma mark - PickerView代理方法
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
return self.foods[component][row];
}
|
要监听选择,只需要再实现一个代理方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
- ( void )pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
NSString *name = self.foods[component][row];
switch (component) {
case 0:
self.fruitLabel.text = name;
break ;
case 1:
self.mainLabel.text = name;
break ;
case 2:
self.drinkLabel.text = name;
break ;
default :
break ;
}
}
|
一个细节:没有点选时的显示数据初始化:
间接利用上面的选择方法来初始化数据:每列都选中第0行,由于用不到pickerView本身,因此传入nil也无妨。
1
2
3
|
for ( int i = 0; i < self.foods.count; i++) {
[self pickerView:nil didSelectRow:0 inComponent:i];
}
|
Tip:键盘上方常常用导航工具条,用于切换上一项、下一项等内容。
直接获取当前的选取项:selectRowInComponent: 传入列号可以得到选中的是第几行。
随机数:
arc4random()可以产生0或者正整数,要产生0 ~ (x-1)的随机数,应该使用 arc4random( ) % x。
关于选择层次的设计(选择左边右边变化),是由代码实现的(更换列的数据)。
需要用到reloadAllComponents或者reloadComponent:方法。
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
-
2025-05-29 65
-
在中国市场上,WooCommerce和Ueeshop哪个电商平台更适合卖家搭建自己的在线商店?
2025-05-25 16 -
Linux服务器如何进行性能监控和调优?有哪些常见的性能优化技巧?
2025-05-25 64 -
2025-06-05 98
-
2025-05-25 87