最近经历了一次技术面试,面试过程是让模仿苹果的电话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中单独实现赋值,如果有更好的方法,欢迎留言。