UIPickerView&UIDatePicker
UIPcikerView数据选择器
点餐系统的案例
搭建界面
-
显示数据
1. 设置数据源和代理 2. 成为数据源和代理 3. 实现数据源和代理方法
注意:数组中元素(id)不能使用点语法,只能用方法来调用.
-
逐个赋值(3个Lbale)
1. 连线 2. 调用实现滚动的方法(相当于tableView中选中cell的方法) 3. 代理方法都能在实现中进行手动调用.
-
随机点餐
1. 根据每列的范围产生相应的随机数(for循环列数) 2. 自动滚动到哪个位置(自动与手动是有区别的
//根据获取到的随机值滚动到那一行(自动滚)
[self.myPicker selectRow:random inComponent:i animated:YES];
//刷新数据(你手动滚,会调用这个方法)
[self pickerView:self.myPicker didSelectRow:random inComponent:i];
3. 赋值
- 解决bug,当当前列随机数与产生随机数的一致时它不会滚动(一样怎么回滚,保证能滚得话,做一个死循环判断)
国旗选择
返回每行中的字符串无法满足要求,返回一个UIView的方法.
UIDatePicker应用:日期选择
自身属性
//设置显示模式
_dataPicker.datePickerMode = UIDatePickerModeTime;
//设置区域
_dataPicker.locale = [NSLocale localeWithLocaleIdentifier:@"zh-Hans"];
- UIDatePicker和UIPickerView没有任何关系(只是长的像,不是继承之类的关系
- UIToolBar的使用(工具条)
- UIBarButtonItem(这个是一个集成自NSOBject的类,不是UIView)与UIButton也没有任何关系.
//纯代码实现键盘的空间替换,文本框的输出view
self.text.inputView
//实现键盘附件的替换
self.text.inputAccessoryView.(并且注意这个替换bar必须设置frame(不然无法点击只能看见)
当你滚动时日期改变可以通过sender.date获取.
- (IBAction)upPickerChangeValue:(UIDatePicker *)sender
NSDate的复习
- 首先有一个NSDate对象.
- 创建一个NSDateFormatter对象来修改date的格式
- formatter.dateFormat来设置格式
- 返回字符串[formatter stringFromDate:date];
省市选择(两级联动)
懒加载
-
实现数据展示
- 因为是两级联动,第一列显示的行数与数据都是根据第0列你所取出的索引来显示的(取出省的索引),再根据这个角标就能获取当前省的城市个数了.
刷新数据(防止越界)
两个同时滚动产生的越界问题解决,设置临时集合替换?原理???
/*
bug解决(同时滚动时产生bug,数组越界,你在滚动时,还没有刷新(是上一个数组的集合),所以角标是上一次的角标,如果太大,你现在滚动到下一列大的角标时就会产生越界问题,用临时集合每一次取得都是它本身的角标,所以不会产生越界问题).
解决方法:
1.设置临时集合
2.在numbe...方法中将获取到的集合赋值给临时集合
3.在 titleForRow和didSelectRow方法中在列数为1时直接调用临时集合中的数据
*/