同一個tableview實現(xiàn)多選單選刪除

大多初學(xué)者對tableview實現(xiàn)刪除蜜唾,點擊cell是都能實現(xiàn)的柏靶,但對于多選宣肚,單選卻不是那么理解导坟。屿良。

寫了一個demo可供參考(不當之處請及時指出)

1,在.h文件中聲明一個變量type,用于區(qū)分進入當前頁面是多選惫周,單選還是刪除

#import <UIKit/UIKit.h>

@interface TableView_chooseViewController : UIViewController
@property (nonatomic,copy)NSString *type;//multiple 多選 single 單選 delete 刪除
@end

2尘惧,在.m中聲明一個用于儲存你選中內(nèi)容的數(shù)組,在demo中我用的是selectedArray 递递,重點在于聲明UITableViewCellEditingStyle (全局化)editingStyle喷橙;

#import "TableView_chooseViewController.h"
#import "TableViewCell.h"

@interface TableView_chooseViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableview;
@property (nonatomic,strong) NSMutableArray *listArray;
@property (nonatomic,strong) NSMutableArray *selectedArray;//選中項所用數(shù)組
@property (nonatomic,assign) UITableViewCellEditingStyle  editingStyle;//用于區(qū)分tableview的多選 單選 及滑動刪除操作
@end

3,然后在viewDidLoad中根據(jù)type類型提前對editingStyle賦值

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.listArray addObjectsFromArray:@[@"張三",@"李四",@"王二",@"麻子"]];
    self.tableview.delegate = self;
    self.tableview.dataSource = self;
    self.tableview.separatorStyle = UITableViewCellSeparatorStyleNone;
    
    if ([self.type isEqualToString:@"multiple"]) {
        self.title = @"多選";
        self.editingStyle = UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
        self.tableview.allowsMultipleSelection = YES;
       
        //定義右上角按鈕
        UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"確定" style:UIBarButtonItemStylePlain target:self action:@selector(okButton)];
        self.navigationItem.rightBarButtonItem = button;
    }else if ([self.type isEqualToString:@"single"]) {
         self.title = @"單選";
        self.editingStyle = UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
        self.tableview.allowsSelection = YES;
        
        //定義右上角按鈕
        UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithTitle:@"確定" style:UIBarButtonItemStylePlain target:self action:@selector(okButton)];
        self.navigationItem.rightBarButtonItem = button;
    }else {
         self.title = @"滑動刪除";
        self.editingStyle = UITableViewCellEditingStyleDelete ;
    }
    // Do any additional setup after loading the view.
}

4登舞,這個比較容易理解就是簡單的tableViewCell的調(diào)用

#pragma mark --UITableView delegate datasoure

//返回section的個數(shù)
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

//返回cell的個數(shù)
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return self.listArray.count;
}

//加載TableViewCell,布局cell中的內(nèi)容
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
    if (cell == nil) {
        cell = [[[NSBundle mainBundle]loadNibNamed:@"TableViewCell" owner:nil options:nil] firstObject];
    }
    cell.type = self.type;
    cell.nameLabel.text = self.listArray[indexPath.row];
    return cell;
}
-(UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    if (indexPath.row == self.listArray.count) {
        return UITableViewCellEditingStyleInsert;
    }else{
        return self.editingStyle;
    }
}
 

5贰逾,根據(jù)type類型 用didSelectRowAtIndexPath和didDeselectRowAtIndexPath來實現(xiàn)多選及單選

//tableView點擊事件
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *string = [self.listArray objectAtIndex:indexPath.row];
    if ([self.type isEqualToString:@"multiple"]) {
        [self.selectedArray addObject:string];
    }else if ([self.type isEqualToString:@"single"]) {
        [self.selectedArray addObject:string];
    }else{
    }
}

//取消tableView選中 點擊事件
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *string = [self.listArray objectAtIndex:indexPath.row];
    NSArray *array = [self.selectedArray mutableCopy];
    if ([self.type isEqualToString:@"multiple"]) {
        for (NSString *str in array) {
            if ([string isEqualToString:str]) {
                [self.selectedArray removeObject:string];
            }
        }
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }else if ([self.type isEqualToString:@"single"]){
        [self.selectedArray removeObject:string];
    }else{
    }
}

6,這個就是大家常見的滑動刪除了逊躁,不多說看代碼


//刪除按鈕的title賦值
-(NSString *)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
    return @"刪除";
}
//刪除用到的函數(shù)
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{
    if(editingStyle == UITableViewCellEditingStyleDelete){
        if (self.listArray.count > 0) {
            [self.listArray removeObjectAtIndex:indexPath.row];
            [_tableview reloadData];
        }
    }
}

7似踱,寫到這里這個demo基本就是完成了隅熙,但考慮到有很多伸手黨稽煤,我還是決定把TableViewCell.m的內(nèi)容貼出來

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];

    if (selected) {
        self.selectImage.image = [UIImage imageNamed:@"charter_tick"];
    }else{
        self.selectImage.image = [UIImage imageNamed:@"charter_select"];
    }
    // Configure the view for the selected state
}

-(void)layoutSubviews{
    [super layoutSubviews];
    if ([self.type isEqualToString:@"multiple"]||[self.type isEqualToString:@"single"]) {
        self.selectImage.hidden = NO;
        self.leftCont.constant = 50;
    }else{
        self.selectImage.hidden = YES;
        self.leftCont.constant = 10;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市囚戚,隨后出現(xiàn)的幾起案子酵熙,更是在濱河造成了極大的恐慌,老刑警劉巖驰坊,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匾二,死亡現(xiàn)場離奇詭異,居然都是意外死亡拳芙,警方通過查閱死者的電腦和手機察藐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舟扎,“玉大人分飞,你說我怎么就攤上這事《孟蓿” “怎么了譬猫?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵讯檐,是天一觀的道長。 經(jīng)常有香客問我染服,道長别洪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任柳刮,我火速辦了婚禮挖垛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘秉颗。我一直安慰自己晕换,他們只是感情好,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布站宗。 她就那樣靜靜地躺著闸准,像睡著了一般。 火紅的嫁衣襯著肌膚如雪梢灭。 梳的紋絲不亂的頭發(fā)上夷家,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機與錄音敏释,去河邊找鬼库快。 笑死,一個胖子當著我的面吹牛钥顽,可吹牛的內(nèi)容都是我干的义屏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼蜂大,長吁一口氣:“原來是場噩夢啊……” “哼闽铐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奶浦,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤兄墅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后澳叉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隙咸,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年成洗,在試婚紗的時候發(fā)現(xiàn)自己被綠了五督。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡瓶殃,死狀恐怖充包,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碌燕,我是刑警寧澤误证,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布继薛,位于F島的核電站,受9級特大地震影響愈捅,放射性物質(zhì)發(fā)生泄漏遏考。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一蓝谨、第九天 我趴在偏房一處隱蔽的房頂上張望灌具。 院中可真熱鬧,春花似錦譬巫、人聲如沸咖楣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诱贿。三九已至,卻和暖如春咕缎,著一層夾襖步出監(jiān)牢的瞬間珠十,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工凭豪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留焙蹭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓嫂伞,卻偏偏與公主長得像孔厉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子帖努,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

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