选择国旗
- 1.搭建界面
- 2.设置pickerView的数据源 - -
- 3.分析有多少列,只有一列,因为是文字和图片是同时滚动,如果两列的话, 不会同时滚动
- 4.加载plist数据,分析数据结构
plist是个数组:返回这一列有多少行国旗
数组里是一个字典:描述着国旗的属性 - 5.字典转模型
- 6.有了数据就需要把数据展示到界面,不能用返回每行标题的方法
- 7.搞一个View,每行需要展示一个标题和图片 -
- 8.自定义view,系统自带的UIView,不好使
- 9.用xib描述自定义view,里面控件是固定的
- 10.设置每行的高度为44 -
- 11.返回每行cell样子的代理方法,reusingView在ios7没有效果,view永远都是 空,没有做缓存。
键盘处理
- 1.搭建界面
- 2.文本框不可以让用户编辑
- 2.1不能设置enable= NO,键盘不能弹出来
- 2.2 通过代理,不允许用户输入,只有生日和城市不需要用户输入,添加 一个判断
- 3.自定义生日键盘
- 3.1 UIDatePicker基本使用,模式,地区 - -
- 3.2监听UIDatePicker的事件,继承UIControl,直接addTarget - 3.3日期格式对象,把date转换字符串,显示到文本框
- 4.自定义城市键盘
- 4.1 UIPickerView,展示数据需要设置数据源和代理 -
- 4.2解析plist数据,分析数据结构
plist是个数组,表示有多少个省份
数组里是一个字典,里面包含省份的信息,名称和城市列表 - 4.3 实现数据源和代理,把数据展示到视图
- 4.4 和之前的点餐不一样,之前直接能获取到每一列有多少行,这里需要 判断当前是哪一列,根据第0列获取第1列的行数,第0列是省,第1列是 城市,城市由省决定
- 4.5 返回第component列多少行
- 4.6 返回第component列第row行的标题,这里的行号可能是第0列的和第 1列的,需要做判断。第0列的row,表示是哪个省,第1列的row,表示 是当前第1列选中的省会的哪个城市。
第0列,省会的标题,取决于省会数组行号 第1列,城市的标题,取决于当前选中哪个省 - 4.7 解决二级联动的问题,两列同时滚动,会报角标越界错误
- 原因:返回每一行的样子的代理方法会经常调用,只要有新的一行 出现就会调用。这里每次都会获取最新选中的省,而第0列展示的 是之前选中的省会,如果最新选中的省会的城市总数小于之前选中 的省会。
- 假设:最新选中的城市只有有4个,但是之前选中的省会城市有10 行,当第1列滚到5就会报角标越界错误。
- 解决方式:这里不能获取最新的选中省会,需要记录之前选中的, 且只需要记录一次,在选中一行的代理方法里记录。 注意:在刷新城市之前记住省会角标,应该刷新的城市,是当前选 中的省会的城市。
- 4.8 监听城市选择,选中新的省会。
- 1> 记录选中的省会
- 2> 刷新第1列
- 3> 第一列默认选中第一个城市
- 4> 把选中的省会和获取选中的城市显示到文本框
- 5.添加自定义键盘工具条
- 5.1 封装工具条:继承UIView,原因:不让外界知道里面是什么东西,就不 能修改Toolbar里面的东西。
- 5.2固定的,用xib 述,并且 供类方法快速创建对象 - 5.3整个文本框应该拥有同一个键盘工具条,懒加载一个键盘工具条,然 后遍历所有的文本框,搞个可变数组把所有文本框添加到数组
- 5.4监听item点击,通过代理通知控制器。
- 5.5当点击下一个,应该是后面的文本框有弹出键盘,成为第一响应者, 怎么判断下一个文本框是谁?
○ 把所有文本框加入到数组中,记录当前弹出键盘的文本框所在的角 标,++就是下一个文本框了。
○ 在文本框开始编辑的时候,记录,编辑的文本框就是弹出键盘的文 本框 - 5.6 解决角标越界的问题,当当前弹出键盘的文本框是第一个角标的时 候,上一个不允许点击