最近有些忙,好久沒(méi)有寫(xiě)博客了。
分享一個(gè)cell做單選的思路
可行的思路
- 在tableview的控制器中設(shè)立一個(gè)變量記錄選擇的indexPath,點(diǎn)擊cell之后刷新表格來(lái)和現(xiàn)有indexPath對(duì)比
- 和第一種大同小異,做一個(gè)和dataArr同樣的數(shù)組,記錄indexPath,循環(huán)確定當(dāng)前cell是否為選中cell
- 利用cell的
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
方法
利弊分析
- 前兩種,都需要在
didSelectRowAtIndexPath
方法中來(lái)刷新表格,可能會(huì)造成不必要的滑動(dòng),而且需要單獨(dú)的外在屬性來(lái)記錄這個(gè)選擇 - 第三種方法是我要介紹的,不用任何外在屬性,不用變量,不用數(shù)組。實(shí)現(xiàn)cell、或cell中Button的單選。并且不會(huì)因?yàn)閺?fù)用而造成位置錯(cuò)亂,如果要實(shí)現(xiàn)cell的多選可以參考我之前的文章Cell的accessoryType屬性標(biāo)記單元格之后,出現(xiàn)的重用問(wèn)題
實(shí)現(xiàn)方式
-
如果要有默認(rèn)選擇在初始化tableView完成后寫(xiě)
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
-
然后在cell中實(shí)現(xiàn)
- (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
方法中給點(diǎn)擊的cell手動(dòng)選中,并不需要刷新表格[tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
至此結(jié)束,可以看一下效果
dvITJ.gif