TableViewCell内含textField的复用
2017-11-20 17:39
176 查看
最近经历了一次技术面试,面试过程是让模仿苹果的电话App中的数据库存储和页面布局部分。因为自己的意识偏差,着重于项目整体
的完善,所以最终时间分配不合理,最后只搭了个基本框架,页面布局部分倒是比较满意,但是数据库部分FMDB的使用留下了一大堆
的BUG。而途中的一个问题直到今天才发现,那就是tableView的cell中如果含有UITextfield,那么在编辑之后就会出现重用问题。而且
在添加新联系人时只要页面发生了改变,那么就应该允许使用右上角的添加导航按钮,否则禁用,这个功能在当时也没有完成。
我所采取的措施是,在cell中的textField的内容改变时,利用模型数组或者字典进行保存,然后在重用时利用模型或者字典进行取值,
如果有值则赋值给cell,如果没有值则赋值nil给cell。同时可以对模型数组或者字典进行遍历,针对其内的值判断是否进行了编辑,然
后决定右上角的导航栏按钮是否可用。
需要注意的是textfield有两个代理方法shouldEnd和shouldChange方法,在shouldEnd的方法里进行动态赋值的话,不能检测编辑的实
时性,事实上我们想要的是只要你开始输入我们就能允许右上角导航栏按钮的使用,只要我们删除到最后一个字母就禁用,所以我们
应该在shouldChange中进行对字典或者模型数组动态赋值,并进行是否编辑的判断,但是shouldChange中textfield的text值和我们编
辑的值是有延迟的,比如我们输入的是“nihao”,最终的textfield的text值是niha,而我们往回清楚的之后,textfield的text值会是n,所以
我们应该shouldEnd中再进行一次动态赋值。
由于输入法的关系,目前没有能够实现在shouldChange中单独实现赋值,如果有更好的方法,欢迎留言。
这是Demo地址
的完善,所以最终时间分配不合理,最后只搭了个基本框架,页面布局部分倒是比较满意,但是数据库部分FMDB的使用留下了一大堆
的BUG。而途中的一个问题直到今天才发现,那就是tableView的cell中如果含有UITextfield,那么在编辑之后就会出现重用问题。而且
在添加新联系人时只要页面发生了改变,那么就应该允许使用右上角的添加导航按钮,否则禁用,这个功能在当时也没有完成。
我所采取的措施是,在cell中的textField的内容改变时,利用模型数组或者字典进行保存,然后在重用时利用模型或者字典进行取值,
如果有值则赋值给cell,如果没有值则赋值nil给cell。同时可以对模型数组或者字典进行遍历,针对其内的值判断是否进行了编辑,然
后决定右上角的导航栏按钮是否可用。
需要注意的是textfield有两个代理方法shouldEnd和shouldChange方法,在shouldEnd的方法里进行动态赋值的话,不能检测编辑的实
时性,事实上我们想要的是只要你开始输入我们就能允许右上角导航栏按钮的使用,只要我们删除到最后一个字母就禁用,所以我们
应该在shouldChange中进行对字典或者模型数组动态赋值,并进行是否编辑的判断,但是shouldChange中textfield的text值和我们编
辑的值是有延迟的,比如我们输入的是“nihao”,最终的textfield的text值是niha,而我们往回清楚的之后,textfield的text值会是n,所以
我们应该shouldEnd中再进行一次动态赋值。
由于输入法的关系,目前没有能够实现在shouldChange中单独实现赋值,如果有更好的方法,欢迎留言。
这是Demo地址
相关文章推荐
- thinking In Java ---07 复用类
- iOS开发表格的复用机制
- UITableViewCell复用机制
- 关于 去除UITableViewCell复用机制 的几种方法
- IO 多路复用之select(理解)
- C++ tips: std::stringstream 对象的复用
- MyBatis数据持久化(八)sql复用
- 并发服务器--02(基于I/O复用——运用Select函数)
- 【 socke】C# socket端口复用-多主机头绑定
- 复用已经打开的iterm链接
- I/O多路复用之总结
- Xcode创建可复用的代码块
- 编写高质量代码改善C#程序的157个建议——建议112:将现实世界中的对象抽象为类,将可复用对象圈起来就是命名空间
- TCP/IP网络编程 学习笔记_13 --基于I/O复用的服务端
- Android listView异步下载和convertView复用产生的错位问题
- 创建可复用单链表
- 大话设计模式笔记 合成/聚合复用原则
- Java复用代码
- 【前端学习】javascript面向对象编程(继承和复用)
- Android实战技巧之四十五:复用原有C代码的方案