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

先发效果图:

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 实现对勾单选)