iOS tableview的編輯,全選,刪除功能

開發(fā)過程中或多或少都會(huì)遇到tableview的各種功能,這里簡(jiǎn)單記錄一下tableview的刪除和全選刪除功能,廢話不多說先看一下效果圖

tableviewGIF.gif

既然拿到了需求,就應(yīng)該想一下如何去實(shí)現(xiàn)了,對(duì)照上面圖片的內(nèi)容,應(yīng)該如何實(shí)現(xiàn)呢?
看完上圖之后發(fā)現(xiàn)用到的幾個(gè)功能:
第一個(gè):左滑刪除
第二個(gè):全選刪除

左邊滑動(dòng)刪除

實(shí)現(xiàn)幾個(gè)代理方法后就可以了

-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath {
    return @"刪除";
}
改變左滑后按鈕的文字
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
        return UITableViewCellEditingStyleDelete;  
}
滑動(dòng)刪除樣式,有多中可選,這里返回刪除樣式
- (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        [self.dataArray removeObjectAtIndex: indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:[NSMutableArray arrayWithObject:indexPath]
                              withRowAnimation:UITableViewRowAnimationFade];
        [self.tableView reloadData];
        
    }
}
刪除點(diǎn)擊方法,處理想要?jiǎng)h除的數(shù)據(jù)
這里有一個(gè)需要注意點(diǎn),一定要先更新數(shù)據(jù)源,在更新UI

左滑刪除就這些代碼了,是不是很easy,在來看全選的代碼

全選刪除

這里我用的是全選功能是系統(tǒng)的方法,沒有自定義按鈕

點(diǎn)擊編輯按鈕的時(shí)候設(shè)置tableview

        [_tableView setEditing:YES animated:YES];

返回全選的樣式

-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
        return UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert;
}
這樣就會(huì)出現(xiàn)左側(cè)的選中框

再來就是全選按鈕的實(shí)現(xiàn)方法

 for (int i = 0; i< self.dataArray.count; i++) {
          NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
          [_tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionTop];
        }
        
        if (self.deleteArray.count >0) {
            [self.deleteArray removeAllObjects];
        }
        [self.deleteArray addObjectsFromArray:self.dataArray];
        
        [btn setTitle:@"取消" forState:UIControlStateNormal];

當(dāng)然取消全選也有方法

 for (int i = 0; i< self.dataArray.count; i++) {
            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:i inSection:0];
            [_tableView deselectRowAtIndexPath:indexPath animated:NO];
            
        }

通過全選按鈕實(shí)現(xiàn)的選中方法,需要在方法里把所有數(shù)據(jù)都添加到想要?jiǎng)h除的數(shù)組里面

通過點(diǎn)擊tableviewcell選擇刪除對(duì)象的時(shí)候需要把想要?jiǎng)h除的數(shù)據(jù)添加到刪除數(shù)組里面

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{

    if (self.btn.selected) {
         NSLog(@"選中");
        [self.deleteArray addObject:[self.dataArray objectAtIndex:indexPath.row]];

    }else{
        NSLog(@"跳轉(zhuǎn)下一頁");
    }
}

再次點(diǎn)擊取消選中的數(shù)據(jù)

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath  {
    
    if (self.btn.selected) {
        NSLog(@"撤銷");
        [self.deleteArray removeObject:[self.dataArray objectAtIndex:indexPath.row]];
        
    }else{
        NSLog(@"取消跳轉(zhuǎn)");
    }

}

問題一:

按照以上方法實(shí)現(xiàn)之后就可以實(shí)現(xiàn)想要的功能,但是還有UI的問題,那就是選擇之后會(huì)出現(xiàn)下圖的問題


Simulator Screen Shot 2017年6月26日 下午3.34.40.png

會(huì)有一層背景色的覆蓋,這里感謝一位簡(jiǎn)友的方法,想要了解的請(qǐng)看看這篇文章
http://www.itdecent.cn/p/af08a40a8821

問題二:

還有一個(gè)問題 ,在自定義的cell上面添加控件的時(shí)候一定要添加到self.contentView上面,否則會(huì)出現(xiàn)控件不隨cell移動(dòng)的問題

 [self.contentView addSubview:self.label];

結(jié)束

到這里這篇文章的內(nèi)容基本算完結(jié)了,如果還是有不明白的我在此留下Demo鏈接,里面有更詳細(xì)的注釋,Demo沒有做UI適配,想看效果的畫在模擬器6,7上面運(yùn)行最好

Demo地址:http://git.oschina.net/T1_mine/tableviewedit

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,654評(píng)論 4 61
  • 環(huán)澳之前我和醬油有個(gè)小約定:路上不投宿任何旅館。雖然旅途中經(jīng)歷了各種抓狂和無奈,最后我們還是完成了小挑戰(zhàn),車和帳篷...
    Yepceline閱讀 1,860評(píng)論 0 12
  • 茨維塔耶娃飛白(譯) 像這樣細(xì)細(xì)地聽,如河口凝神傾聽自己的源頭。像這樣深深地嗅.嗅一朵小花.直到知覺化為烏有。 像...
    粉筆頭閱讀 610評(píng)論 0 3

友情鏈接更多精彩內(nèi)容