先發(fā)效果圖:
做這個之前,我們必須先了解一下UITableView的執(zhí)行順序观游,這是非常必要的:
1-刷新的時候:
1.1 numberOfSectionsInTableView(確定有幾組) -> numberOfRowsInSection(確定每組有多少的行) -> heightForRowAtIndexPath(確定每行cell的高度) 1.2 以上信息確定完畢后再依次調(diào)用cellForRowAtIndexPath -> heightForRowAtIndexPath 1.3 當(dāng)滾動獲取超出屏幕的cell 會再依次調(diào)用 cellForRowAtIndexPath -> heightForRowAtIndexPath
2- 點擊的時候
didSelectRowAtIndexPath (點擊的時候) numberOfSectionsInTableView (確定有多少組) numberOfRowsInSection (確定一組有多少行) heightForRowAtIndexPath (確定每行的高度) cellForRowAtIndexPath (行的樣式是什么) heightForRowAtIndexPath (重新確定cell的行高)
接下來之后讓我們走一下代碼邏輯
1.首先我們先標(biāo)記一個屬性黔帕,選中的行NSIndexPath
/// 選中的行 @property (nonatomic, strong) NSIndexPath *selIndex;
2.我們對選中的行進(jìn)行默認(rèn)賦值,選中的是0組第0行
// 默認(rèn)選中第一行 _selIndex = [NSIndexPath indexPathForRow:0 inSection:0];
3.我們就要考慮一下借尿,當(dāng)我們點擊某一行時民鼓,上一次選中的行selIndex,打?qū)吹陌粹o圖片要設(shè)置為空误趴,讓它不顯示霹琼。而當(dāng)前點擊的行打?qū)吹陌粹o圖片設(shè)置為對勾圖片,讓其顯示凉当。再把當(dāng)前點擊的行枣申,就相當(dāng)于目前選中的行,進(jìn)行賦值看杭。(didSelectRowAtIndexPath這個方法里執(zhí)行下面代碼)
//之前選中的忠藤,取消選擇 JCMFoundDetailsAlertCell *celled = (JCMFoundDetailsAlertCell *)[tableView cellForRowAtIndexPath:_selIndex]; [celled.imageView setImage:[UIImage imageNamed:@""]]; [celled.markBtn setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; celled.leftLab.textColor = [UIColor colorWithHexString:@"#333333"]; //記錄當(dāng)前選中的位置索引 _selIndex = indexPath; //當(dāng)前選擇的打勾 JCMFoundDetailsAlertCell *cell = (JCMFoundDetailsAlertCell *)[tableView cellForRowAtIndexPath:indexPath]; [cell.markBtn setImage:[UIImage imageNamed:@"duigou_icon123"] forState:UIControlStateNormal]; cell.leftLab.textColor = [UIColor colorWithHexString:@"#fe2900"];
4.我們知道了,基本差不多了楼雹,但是還是不行模孩,因為點擊的時候也會調(diào)取cellForRowAtIndexPath方法尖阔,且,在上下滑動列表的時候榨咐,cell會出現(xiàn)復(fù)用介却,所以就需要在下面的方法再判斷是誰打勾。(cellForRowAtIndexPath這個方法里執(zhí)行下面代碼)
// 上下滑動列表的時候块茁,因為cell的復(fù)用齿坷,需要在下面的方法再判斷是誰打勾if (_selIndex == indexPath) { // 當(dāng)前選中的行 [cell.markBtn setImage:[UIImage imageNamed:@"duigou_icon123"] forState:UIControlStateNormal]; cell.leftLab.textColor = [UIColor colorWithHexString:@"#fe2900"]; }else{ // 非當(dāng)前選中的行 [cell.markBtn setImage:[UIImage imageNamed:@""] forState:UIControlStateNormal]; cell.leftLab.textColor = [UIColor colorWithHexString:@"#333333"]; }