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