优雅的实现TableViewCell单选
2018-01-19 本文已影响69人
上冬十二
最近有些忙,好久没有写博客了。
分享一个cell做单选的思路
可行的思路
- 在tableview的控制器中设立一个变量记录选择的indexPath,点击cell之后刷新表格来和现有indexPath对比
- 和第一种大同小异,做一个和dataArr同样的数组,记录indexPath,循环确定当前cell是否为选中cell
- 利用cell的
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
方法
利弊分析
- 前两种,都需要在
didSelectRowAtIndexPath
方法中来刷新表格,可能会造成不必要的滑动,而且需要单独的外在属性来记录这个选择 - 第三种方法是我要介绍的,不用任何外在属性,不用变量,不用数组。实现cell、或cell中Button的单选。并且不会因为复用而造成位置错乱,如果要实现cell的多选可以参考我之前的文章Cell的accessoryType属性标记单元格之后,出现的重用问题
实现方式
-
如果要有默认选择在初始化tableView完成后写
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
-
然后在cell中实现
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
方法- (void)setSelected:(BOOL)selected animated:(BOOL)animated { [super setSelected:selected animated:animated]; if (selected) { self.selBtn.selected = YES; }else { self.selBtn.selected = NO; } }
-
在
didSelectRowAtIndexPath
方法中给点击的cell手动选中,并不需要刷新表格[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
至此结束,可以看一下效果
dvITJ.gif