iOS 不要使用tag传递TableViewCell的indexPath值
来源:互联网 发布:香港人淘宝购物 编辑:程序博客网 时间:2024/06/01 07:59
之前我在项目中总是会遇到这样的情况:在UITableViewCell中添加了一个UIButton,UIButton点击后触发buttonPress:方法,在方法被调用后需要知道用户点击的是哪一个Cell。
原来我的做法是button.tag = indexPath.section 或者 button.tag = indexPath.row,很简单 =。= 隐约总觉得这种实现方式不是正规做法,但一直也没想起来改。
错误代码示范,请勿模仿:
今天我发现了这样做的弊端。
我在TableView中需要实现一个删除操作:点击Cell中的删除按钮后,删除当前行的Cell,使用动画效果。
我是这样实现的:
ok,我删除掉啦,看上去一切良好~
然后程序点击两下就崩掉了。。。
看了下抛出的异常,说代码中访问了不存在的indexPath.section或row值。想了想明白了:原来都是使用UIButton的tag进行记录indexPath值的,但是这种删除操作执行后,UIButton的tag值是不会更新的,只有在执行[_tableView reloadData]方法(或滑动列表,这时会调用cellForRowAtIndexPath方法)才能刷新。
所以这时TableViewCell中的button.tag值已经不对了!这时对Cell做操作,获得的indexPath值根本不对,程序报错是必然的。
解决办法是?
当然是使用正规的办法获取indexPath值!如何做呢?
一点思考
使用tag值传递indexPath是一种不安全的做法。因为它和原始值之间没有“强联系”。这就像人传话,a直接与b交流没什么问题,但a委托j再委托k再委托l传话给b时,就很难保证不出问题。在上述例子中,就是由于tableView列表中的cell发生变化,而tag存储的值是“二手数据”,因而给后面的代码传值出错,导致最终程序崩溃。所以在程序设计时,要尽量避免使用这种“二手数据”,一来保证数据正确,二来减少代码维护量。
- iOS 不要使用tag传递TableViewCell的indexPath值
- iOS 不要使用tag传递TableViewCell的indexPath值
- 获取tableViewCell点击的位置和indexPath
- iOS TableViewCell的使用总结
- iOS tableVIewCell的使用总结
- iOS tableVIewCell的使用总结
- IOS tag的使用
- iOS 获取控件所在cell的indexPath值
- iOS TableViewCell 的伸缩
- 动态tableView中通过点击tableViewCell内部的一个控件找到indexPath
- tableViewcell button点击 获取cell的indexpath 并刷新当前cell
- tag值的使用
- 【iOS开发-76】Private Contacts案例:导航控制器使用、数据传递、第三方类库使用、tableViewCell的添加删除、数据存储等
- IOS:最简单一个使用自定义的TableViewCell例子
- iOS 视图的tag使用详解
- iOS 手势 点击tableViewCell 传不同的值
- ios-collectionView?.deleteItems(at: [indexPath])造成的错误
- 如何 iOS 编程中使用自定义 TableViewCell
- 欢迎使用CSDN-markdown编辑器
- 你的App真正适配了iOS 9吗?
- 电影
- 2014找工作总结-机会往往留给有准备的人
- 统计一句话中的单词数
- iOS 不要使用tag传递TableViewCell的indexPath值
- aaaa
- Xcode7 模拟器无法联网问题
- 一个偶数可以拆分成两个奇数
- 讲一句话中的每个单词首字母大写
- 找出指定单词在一句话中出现的次数
- SSH框架学习总结及注意事项(常宝)
- LeetCode 题解(216) : Intersection of Two Linked Lists
- iOS开发 -- UICollectionView(集合视图)