優(yōu)雅的實(shí)現(xiàn)TableViewCell單選

最近有些忙,好久沒(méi)有寫(xiě)博客了。
分享一個(gè)cell做單選的思路

可行的思路

  1. 在tableview的控制器中設(shè)立一個(gè)變量記錄選擇的indexPath,點(diǎn)擊cell之后刷新表格來(lái)和現(xiàn)有indexPath對(duì)比
  2. 和第一種大同小異,做一個(gè)和dataArr同樣的數(shù)組,記錄indexPath,循環(huán)確定當(dāng)前cell是否為選中cell
  3. 利用cell的- (void)setSelected:(BOOL)selected animated:(BOOL)animated方法

利弊分析

  1. 前兩種,都需要在didSelectRowAtIndexPath方法中來(lái)刷新表格,可能會(huì)造成不必要的滑動(dòng),而且需要單獨(dú)的外在屬性來(lái)記錄這個(gè)選擇
  2. 第三種方法是我要介紹的,不用任何外在屬性,不用變量,不用數(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)方式

  1. 如果要有默認(rèn)選擇在初始化tableView完成后寫(xiě)

    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
    [self.tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
    
  2. 然后在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;
        }
    }
    
  3. didSelectRowAtIndexPath方法中給點(diǎn)擊的cell手動(dòng)選中,并不需要刷新表格

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

至此結(jié)束,可以看一下效果


dvITJ.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容