美文网首页攻城狮程序员iOS 进阶
优雅的实现TableViewCell单选

优雅的实现TableViewCell单选

作者: 上冬十二 | 来源:发表于2018-01-19 15:40 被阅读69次

    最近有些忙,好久没有写博客了。
    分享一个cell做单选的思路

    可行的思路

    1. 在tableview的控制器中设立一个变量记录选择的indexPath,点击cell之后刷新表格来和现有indexPath对比
    2. 和第一种大同小异,做一个和dataArr同样的数组,记录indexPath,循环确定当前cell是否为选中cell
    3. 利用cell的- (void)setSelected:(BOOL)selected animated:(BOOL)animated方法

    利弊分析

    1. 前两种,都需要在didSelectRowAtIndexPath方法中来刷新表格,可能会造成不必要的滑动,而且需要单独的外在属性来记录这个选择
    2. 第三种方法是我要介绍的,不用任何外在属性,不用变量,不用数组。实现cell、或cell中Button的单选。并且不会因为复用而造成位置错乱,如果要实现cell的多选可以参考我之前的文章Cell的accessoryType属性标记单元格之后,出现的重用问题

    实现方式

    1. 如果要有默认选择在初始化tableView完成后写

      NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
      [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
      
    2. 然后在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;
          }
      }
      
    3. didSelectRowAtIndexPath方法中给点击的cell手动选中,并不需要刷新表格

      [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
      

    至此结束,可以看一下效果


    dvITJ.gif

    相关文章

      网友评论

      本文标题:优雅的实现TableViewCell单选

      本文链接:https://www.haomeiwen.com/subject/oxaooxtx.html