tableView的多選和單選

系統(tǒng)自帶的多選

Snip20170605_1.png
  • 首先讓tableView允許多選操作
 // 允許在編輯模式進(jìn)行多選操作
 self.tableView.allowsMultipleSelectionDuringEditing = YES;
  • 當(dāng)點(diǎn)擊編輯的時(shí)候設(shè)置tableView的編輯模式
[self.tableView setEditing:YES animated:YES];
  • 如果你想讓一個(gè)按鈕來控制tableView的編輯和不編輯的狀態(tài)可以這么寫
[self.tableView setEditing:!self.tableView.isEditing animated:YES];
  • 完成以上幾步就可以選擇想要?jiǎng)h除的cell了
  • 但是如果你想刪除選中的數(shù)據(jù)要實(shí)現(xiàn)下面的方法
- (void)remove
{
    // 獲得所有被選中的行
    NSArray *indexPaths = [self.tableView indexPathsForSelectedRows];

    
    // 便利所有的行號(hào)
    NSMutableArray *deletedDeals = [NSMutableArray array];
    for (NSIndexPath *path in indexPaths) {
        [deletedDeals addObject:self.deals[path.row]];
    }
    
    // 刪除模型數(shù)據(jù)
    [self.deals removeObjectsInArray:deletedDeals];
    
   // 刷新表格  一定要刷新數(shù)據(jù)
    [self.tableView reloadData];
}
# 說明:self.deals 是存放模型的數(shù)組

自定義cell多選

Snip20170605_2.png
  • 首先開發(fā)模式是MVC思想(如果不是MVC思想往后看)
    • 給模型增加一個(gè)屬性
    • 這個(gè)屬性是用來顯示或者隱藏 打鉤 的圖片的
/** 狀態(tài)量標(biāo)識(shí)有無被打鉤 */
@property (assign, nonatomic, getter=isChecked) BOOL checked;
  • 然后再給cell賦值的時(shí)候判斷cell子控件打鉤圖片的顯示隱藏
// 設(shè)置打鉤控件的顯示和隱藏
self.checkView.hidden = !deal.isChecked;
  • 最后一步就是 給模型的checked屬性賦值
    • 在tableView的點(diǎn)擊方法中實(shí)現(xiàn)下面代碼
    • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
// 取消選中這一行
[tableView deselectRowAtIndexPath:indexPath animated:YES];

// 模型的打鉤屬性取反
Deal *deal = self.deals[indexPath.row];
deal.checked = !deal.isChecked;

// 刷新表格
[tableView reloadData];

# 說明:Deal 是模型數(shù)據(jù)    self.deals是存放模型數(shù)據(jù)的數(shù)組

自定義cell多選(不是MVC開發(fā)模式)

  • 首先聲明一個(gè)可變數(shù)組用來存放點(diǎn)擊cell的indexPath
@property (nonatomic, strong) NSMutableArray *indexPaths;

# 并且進(jìn)行懶加載
- (NSMutableArray *)indexPaths
{
    if (!_indexPaths) {
        _indexPaths = [NSMutableArray array];
    }
    return _indexPaths;
}

  • 然后再給你cell賦值的地方寫下面代碼
//mr_tb 未選中圖片  xz_tb選中圖片
#默認(rèn)是沒有任何選中的cell的
cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
//多選
for (NSIndexPath * index in self.indexPaths) 
{//遍歷數(shù)組里面的索引 和 當(dāng)前索引是否一致
     if (index == indexPath)
     {//改變?cè)谶x擇的數(shù)組里面的記錄
          cell.imageView.image = [UIImage imageNamed:@"xz_tb"];//選中
          break;
     }
}
  • 在tableView的點(diǎn)擊代理方法中實(shí)現(xiàn)下面方法
//取出當(dāng)前cell
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIImage * image = [UIImage imageNamed:@"xz_tb"];
if ([cell.imageView.image isEqual:image]) 
{//如果為選中 變成未選中
     cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
     [self.indexPaths removeObject:indexPath];
}else{//如果為未選中 變成選中
      cell.imageView.image = [UIImage imageNamed:@"xz_tb"];
      [self.indexPaths addObject:indexPath];
}
  • 如果你想控制多選的個(gè)數(shù)的話 你可以這么寫
 UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIImage * image = [UIImage imageNamed:@"xz_tb"];
if ([cell.imageView.image isEqual:image])
 {//如果為選中
       cell.imageView.image = [UIImage imageNamed:@"mr_tb"];
       [self.indexPaths removeObject:indexPath];
}else{
       if (self.indexPaths.count >= 2)
       {//如果當(dāng)前數(shù)組存儲(chǔ)的索引超過兩個(gè)直接返回
        [self showMessage:@"最多只能選擇兩個(gè)"];
         return;
        }else{
                cell.imageView.image = [UIImage imageNamed:@"xz_tb"];
                [self.indexPaths addObject:indexPath];
            }
            
        }
  • 整體的思想就是當(dāng)你選中某一個(gè)cell的時(shí)候取出當(dāng)前cell的圖片 和 選中圖片進(jìn)行對(duì)比 如果一樣 就把當(dāng)前cell的iamge變成另外一個(gè)圖片 (當(dāng)變成未選中的時(shí)候 要把在數(shù)組里面的indexPath移除,當(dāng)變成選中的時(shí)候設(shè)置選中的圖片 并且把當(dāng)前選中的indexPath保存在數(shù)組中)

自定義cell單選

  • 在tableView的點(diǎn)擊dialing方法中寫下下面代碼
for (int i = 0; i < self.deals.count; i++) {
        Deal *deal = self.deals[i];
        if (i != indexPath.row) {
            deal.checked = YES;
        }else{
            deal.checked = NO;
        }
    }
# Deal 是數(shù)據(jù)模型   self.deals 是存放數(shù)據(jù)模型的數(shù)組
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捍壤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子峻堰,更是在濱河造成了極大的恐慌恍风,老刑警劉巖诊赊,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栋盹,死亡現(xiàn)場(chǎng)離奇詭異笙各,居然都是意外死亡唱蒸,警方通過查閱死者的電腦和手機(jī)邦鲫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神汹,“玉大人庆捺,你說我怎么就攤上這事∑ㄎ海” “怎么了滔以?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)氓拼。 經(jīng)常有香客問我你画,道長(zhǎng),這世上最難降的妖魔是什么桃漾? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任坏匪,我火速辦了婚禮,結(jié)果婚禮上撬统,老公的妹妹穿的比我還像新娘适滓。我一直安慰自己,他們只是感情好恋追,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布粒竖。 她就那樣靜靜地躺著,像睡著了一般几于。 火紅的嫁衣襯著肌膚如雪蕊苗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天沿彭,我揣著相機(jī)與錄音朽砰,去河邊找鬼。 笑死喉刘,一個(gè)胖子當(dāng)著我的面吹牛瞧柔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播睦裳,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼造锅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了廉邑?” 一聲冷哼從身側(cè)響起哥蔚,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤倒谷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后糙箍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渤愁,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年深夯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抖格。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咕晋,死狀恐怖雹拄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掌呜,我是刑警寧澤办桨,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站站辉,受9級(jí)特大地震影響呢撞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜饰剥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一殊霞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧汰蓉,春花似錦绷蹲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至若厚,卻和暖如春拦英,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背测秸。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工疤估, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人霎冯。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓铃拇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親沈撞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子慷荔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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