美文网首页A知识点
UITableView系统自带多选效果

UITableView系统自带多选效果

作者: 姜流儿96 | 来源:发表于2017-07-26 17:14 被阅读513次

    最近有列表多选删除的需求,以前一直是自己实现这种效果,这次该用一下系统自带的,也算是狠狠的踩了一把坑。记录一下,提醒自己,也希望能帮助偶然来到的朋友。

    1、一般只需要两句话就能进入TableView的编辑模式下的多选模式

    self.tableView.allowsMultipleSelectionDuringEditing = YES;
    [self.tableView setEditing:YES animated:YES];
    

    这样就进入了多选模式了,但是一定要注意,如果是自定义的cell的话,一定要在cell的实现文件里面加上这句话,很坑,坑了半天。。。

    self.selectionStyle = UITableViewCellSelectionStyleDefault;
    

    之后选中的cell背景会变成默认的蓝色,修改方法:在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中添加

    cell.selectedBackgroundView = [[UIView alloc] initWithFrame:cell.frame];
        cell.selectedBackgroundView.backgroundColor = [UIColor clearColor];
    

    2、一般的需求都会定制前面对勾的样式,同样的也在这记录一下。在cell的实现文件里面重写两个方法:

    -(void)layoutSubviews  //替换选中和未选中图片
    {
        for (UIControl *control in self.subviews){
            if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){
                for (UIView *v in control.subviews)
                {
                    if ([v isKindOfClass: [UIImageView class]]) {
                        UIImageView *img=(UIImageView *)v;
                        if (self.selected) {
                            img.image=[UIImage imageNamed:@"loginclickboxbg2.png"];
                        }else
                        {
                            img.image=[UIImage imageNamed:@"loginclickboxbg1.png"];
                        }
                    }
                }
            }
        }
        [super layoutSubviews];
    }
    
    
    //适配第一次图片为空的情况
    - (void)setEditing:(BOOL)editing animated:(BOOL)animated
    {
        [super setEditing:editing animated:animated];
        for (UIControl *control in self.subviews){
            if ([control isMemberOfClass:NSClassFromString(@"UITableViewCellEditControl")]){
                for (UIView *v in control.subviews)
                {
                    if ([v isKindOfClass: [UIImageView class]]) {
                        UIImageView *img=(UIImageView *)v;
                        if (!self.selected) {
                            img.image=[UIImage imageNamed:@"loginclickboxbg1.png"];
                        }
                    }
                }
            }
        }
        
    }
    

    相关文章

      网友评论

        本文标题:UITableView系统自带多选效果

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