UIPickView和UIDatePicker
- 1.UIPickView什么时候用?
• 通常在注册模块,当用户需要选择一些东西的时候,比如说城市,往往
弹出一个PickerView给他们选择。 • 老虎机效果
- 2.UIPickView常见用法,演示实例程序
- 1>独立的,没有任何关系 =>菜单系统。
- 2>相关联的,下一列和第一列有联系=>省会城市选择
- 3>图文并帽,=>国旗选择。
- 3.UIPickView
- 4.UIDatePicker什么时候用? 当用户选择日期的时候,一般弹出一个UIDatePicker给用户选择。
- 5.UIDatePickerios6和ios7的区别
点餐系统PickerView
- 1.搭建界面
- 1> 注意点:PickerView的高度不能改,默认162,PickerView里面每行的高度 可以改,不要弄混淆了。
- 2.pickerView显示数据
- 1> 如何使用PickerView展示数据? 进入PickerView头文件,有数据源和代理,联想到UITableView,模仿 UITableView的用法。
- 2> 让控制器作为PickerView的数据源,控制器遵守PickerView的数据源方法
- 2.1>两种方式:1.拖线 2.代码 - - -
- 2.2>系统自带的控件,数据源和代理属性不需要IBOutlet,也能拖 线。自己的属性,想要拖线,必须写IBOutlet。
- 3> PickerView的数据源方法
- 1> numberOfComponentsInPickerView: 返回多少列
- 2> pickerView:numberOfRowsInComponent: 返回第component列有多少 行
- 3> 和UITableView的区别,每一行长什么样,是由PickerView的代理决 定的。
- 4> 注意:如果没有返回每一行长什么样子,每行就会显示?,看见?,就 知道没有实现每一行长什么样子的方法。
- 4> PickerView的代理方法
- 1> 返回第component列第row行长什么样。
第component列第row行的展示标题
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
第component列第row行带属性的标题
- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger) component
第component列第row行展示的视图
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view;
- gView:(UIView *)view;
- 2> 返回第component列每一行的高度和宽度
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component;
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component;
- 3> 选中第component列第row行调用
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component;
-
- 加载plist数据
- 1> 分析数据结构
- 1> 大数组元素个数:多少列
- 2>大数组里面的小数组: 这一列有多少行。
- 3> 小数组里的字符串: 每行展示的样子
- 4.处理菜单选中业务
- 1> 选中某一列某一行,显示出来
- 2> 拖动不同列,改变不同的label,拖动第一列改变水果。
- 3> 判断拖动哪一列,改变对应的label
- 4> 在viewDidLoad中初始化label显示
- 5> 取出数组中的数据给label直接赋值 _fruitLabel.text = self.foots[0][0]; 这种 方式不好,如果以后数组里有很多数据,要写很多行。
- 6> 还有另外一种方式,通过调用代理,给label赋值.唯一不同的,就是列 数,搞个for循序就好了。
- 5.随机选中某一列的某一行
- 1> 如何选中某一行 [self.pickerView selectRow:row inComponent:component
animated:YES];
- 2> 先随机选中第0列的某一行,随机数取值范围看第0列总共有多少行,
arc4random_uniform(x)随机0~x-1的数
- 3> 避免随机出来的行数都一样,需要判断下,随机出来的行数和当前选中 的是否一样,一样就重新随机,用while判断,直到随机到不一样,才行。
- 4> 问题:label没有显示最新选中的一行。
原因:手动调用pickview滚动,选中某一行,不会触发代理,我们自己 主动调用代理,让lebel显示选中哪一行.
注意:只有用户手动滚动才可以触发pickview的代理方法。
- 5> 每一列都要随机选中,弄个for循序,遍历每一列都随机选中
网友评论