美文网首页IT@程序员猿媛
iOS 小知识点:多行TableViewCell 实现对勾单选

iOS 小知识点:多行TableViewCell 实现对勾单选

作者: 麦穗0615 | 来源:发表于2019-03-07 11:06 被阅读13次

    先发效果图:

    Cell上的单选

    做这个之前,我们必须先了解一下UITableView的执行顺序,这是非常必要的:

    1-刷新的时候:

      1.1 numberOfSectionsInTableView(确定有几组) -> numberOfRowsInSection(确定每组有多少的行) -> heightForRowAtIndexPath(确定每行cell的高度)
      1.2 以上信息确定完毕后再依次调用cellForRowAtIndexPath -> heightForRowAtIndexPath
      1.3 当滚动获取超出屏幕的cell 会再依次调用 cellForRowAtIndexPath -> heightForRowAtIndexPath
    

    2- 点击的时候

     didSelectRowAtIndexPath            (点击的时候)
     numberOfSectionsInTableView       (确定有多少组)
     numberOfRowsInSection             (确定一组有多少行)
     heightForRowAtIndexPath           (确定每行的高度)
     cellForRowAtIndexPath             (行的样式是什么)
     heightForRowAtIndexPath           (重新确定cell的行高)
    

    接下来之后让我们走一下代码逻辑

    1.首先我们先标记一个属性,选中的行NSIndexPath

    /// 选中的行
    @property (nonatomic, strong) NSIndexPath *selIndex;
    

    2.我们对选中的行进行默认赋值,选中的是0组第0行

     // 默认选中第一行
     _selIndex = [NSIndexPath indexPathForRow:0 inSection:0];
    

    3.我们就要考虑一下,当我们点击某一行时,上一次选中的行selIndex,打对勾的按钮图片要设置为空,让它不显示。而当前点击的行打对勾的按钮图片设置为对勾图片,让其显示。再把当前点击的行,就相当于目前选中的行,进行赋值。(didSelectRowAtIndexPath这个方法里执行下面代码)

    //之前选中的,取消选择
     JCMFoundDetailsAlertCell *celled = (JCMFoundDetailsAlertCell *)[tableView cellForRowAtIndexPath:_selIndex];
     [celled.imageView setImage:[UIImage imageNamed:@""]];
     [celled.markBtn setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
     celled.leftLab.textColor = [UIColor colorWithHexString:@"#333333"];
    //记录当前选中的位置索引
    _selIndex = indexPath;
    //当前选择的打勾
    JCMFoundDetailsAlertCell *cell = (JCMFoundDetailsAlertCell *)[tableView cellForRowAtIndexPath:indexPath];
    [cell.markBtn setImage:[UIImage imageNamed:@"duigou_icon123"] forState:UIControlStateNormal];
    cell.leftLab.textColor = [UIColor colorWithHexString:@"#fe2900"];
    

    4.我们知道了,基本差不多了,但是还是不行,因为点击的时候也会调取cellForRowAtIndexPath方法,且,在上下滑动列表的时候,cell会出现复用,所以就需要在下面的方法再判断是谁打勾。(cellForRowAtIndexPath这个方法里执行下面代码)
    // 上下滑动列表的时候,因为cell的复用,需要在下面的方法再判断是谁打勾

    if (_selIndex == indexPath) {
          // 当前选中的行
          [cell.markBtn setImage:[UIImage imageNamed:@"duigou_icon123"] forState:UIControlStateNormal];
          cell.leftLab.textColor = [UIColor colorWithHexString:@"#fe2900"];
    }else{
            // 非当前选中的行
         [cell.markBtn setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal];
          cell.leftLab.textColor = [UIColor colorWithHexString:@"#333333"];
    }

    相关文章

      网友评论

        本文标题:iOS 小知识点:多行TableViewCell 实现对勾单选

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