TableViewCell内含textField的复用

解决UITableView Cell重用问题
本文分享了在iOS开发过程中遇到的UITableView Cell重用问题及解决方案。通过在textField的内容变化时利用模型数组或字典保存内容,并在shouldChange方法中进行实时编辑判断,解决了编辑后重用的问题。同时探讨了如何根据编辑状态启用或禁用导航栏按钮。

最近经历了一次技术面试,面试过程是让模仿苹果的电话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地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值