UITableView多选Cell操作

作者: 吃得慢饿得快1 | 来源:发表于2015-09-01 15:02 被阅读14824次

    先新建一个项目,命名为UITableViewDemo,storyboard中拖入一个UITableViewController,然后新建一个继承自UITableViewController的类,命名为UDTableViewController。在storyboard中将拖入的UITableViewController的Custom Class,Class设置为刚刚新建的UDTableViewController。

    定义一个复用标识

    static NSString * const reuseIdentifier = @"UDCell";

    当前tableview注册UITableViewCell类并设置复用标识为上面的标识

    - (void)viewDidLoad {

    [super viewDidLoad];

    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:reuseIdentifier];

    // Uncomment the following line to preserve selection between presentations.

    // self.clearsSelectionOnViewWillAppear = NO;

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.

    self.navigationItem.rightBarButtonItem=self.editButtonItem;

    }

    采用复用的cell,并设置显示内容

    - (NSInteger)numberOfSectionsInTableView:(UITableView*)tableView {

    // Return the number of sections.

    return 1;

    }

    - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section {

    // Return the number of rows in the section.

    return 20;

    }

    - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {

    UITableViewCell*cell = [tableView dequeueReusableCellWithIdentifier:reuseIdentifier forIndexPath:indexPath];

    cell.textLabel.text= [NSString stringWithFormat:@"%ld", indexPath.row];

    // Configure the cell...

    returncell;

    }

    现在看起来是这个样子:

    正常状态 编辑状态

    现在怎么让UITableView编辑时为多选呢?

    那就是实现UITableView的代理方法

    - (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath;

    UITableViewCellEditingStyle为编辑状态, 声明如下:

    typedefNS_ENUM(NSInteger, UITableViewCellEditingStyle) {

    UITableViewCellEditingStyleNone, //无

    UITableViewCellEditingStyleDelete,//删除状态

    UITableViewCellEditingStyleInsert//插入状态

    };

    而多选就是UITableViewCellEditingStyleDelete、UITableViewCellEditingStyleInsert两者的组合。

    所以返回状态如下:

    - (UITableViewCellEditingStyle)tableView:(UITableView*)tableView editingStyleForRowAtIndexPath:(NSIndexPath*)indexPath

    {

    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;

    }

    现在可以多选了,效果图:

    多选

    下面的方法为提交编辑时响应的方法,比如:删除状态下点击cell右边的删除按钮时;插入状态下点击左侧添加按钮时。编辑状态下并不会调用此方法,所以只能取其它的办法。

    - (void)tableView:(UITableView*)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath*)indexPath

    怎么保存多选的row呢?

    如果要保存多选的row,我有一个方法(如果你有更好的方法,请告诉我😄):

    -- 将需要返回的UITableViewCellEditingStyle 声明为全局变量currentEditingStyle(可以在一个UITableView中轻松切换、处理不同编辑状态)。

    -- 实现2个代理方法:didSelectRowAtIndexPath:和didDeselectRowAtIndexPath:

    声明一个用于保存row的可变数组multipleSelectedRows并初始化。多选状态下选中某cell时,didSelectRowAtIndexPath:中区分是否是多选状态:

    if(currentEditingStyle != (UITableViewCellEditingStyleDelete|UITableViewCellEditingStyleInsert)) {

    return;

    }

    //multiple action

    如果是,则将选中row添加到multipleSelectedRows中。

    didDeselectRowAtIndexPath:方法同理,先区分是否多选状态,如果是,并且multipleSelectedRows中存在的row和deselectrow相同则移出数组。

    扩展:

    1、如果将

    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;

    改为

    return UITableViewCellEditingStyleDelete & UITableViewCellEditingStyleInsert;

    会发现,多选按钮不见了。你可以自己添加自定义多选按钮!

    相关文章

      网友评论

      • 634585edc862:我点击cell的时候会push到另一个界面,选中不了怎么解决
        coderChrisLee:在点击的方法里面:
        [tableView selectRowAtIndexPath:indexPath animated:YES scrollPosition:(UITableViewScrollPositionNone)];
      • 韩李璐璐:return UITableViewCellEditingStyleInsert | UITableViewCellEditingStyleDelete;
        这一步我会报错啊
        func_老衲姓罗:@韩李璐璐 你是swift吧 ?
        return UITableViewCellEditingStyle.init(rawValue: UITableViewCellEditingStyle.Insert.rawValue | UITableViewCellEditingStyle.Delete.rawValue)!
      • edceezz:tableView.allowsMultipleSelectionDuringEditing = true
      • f13aea0632ac:大神,求救为什么我的没有圆圈显示!
        coderChrisLee:圆圈没有显示,应该是需要先设置;
        tableView.editing = YES;
        tableView.allowsMultipleSelectionDuringEditing = YES;
      • 改个假名稳当点:你好,为什么我进入多选编辑状态,选中并没有变成蓝色的勾选,这是你自定义的视图吗?还是用的系统自带的,是自带的怎么弄呀?求指教,急!
        coderChrisLee:@迷失梦想的驴子 好一个“别设置为None”,竟然没看出来你的“别”字。
        coderChrisLee:@迷失梦想的驴子 不是设置为None,而是设置:
        cell.selectionStyle = UITableViewCellSelectionStyleBlue;
        改个假名稳当点:@迷失梦想的驴子 半年前问的。。。。还是谢谢博主看到回复
      • 杨桃wd:你好 我按你的方法做 多选按钮并没有不见 这是怎么回事
      • 8bad32f37704:可以请教怎么添加定义控件吗?
        吃得慢饿得快1:@tttttt 这个可以有
        8bad32f37704:@吃得慢饿得快1 就是你最后说的添加自定义多选按钮,谢谢。
        吃得慢饿得快1:@tttttt 自定义cell?
      • LostAbaddon:写程序相关的文章的话,推荐使用markdown模式哦(在设置中可以设定,设定后对新建的文章生效)。
        然后markdown模式下代码块的语法是这样的:
        ```code_lang
        blablabla
        ```

      本文标题:UITableView多选Cell操作

      本文链接:https://www.haomeiwen.com/subject/mwhlcttx.html