由于项目需求,cell编辑状态下左边的删除图片和右边的移动的图片不能使用系统的,可以使用下面方法修改图片
1.在自定义cell的初始化方法中自定义删除按钮
- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.deleteButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.deleteButton setImage:[UIImage imageNamed:@"qudiao"] forState:UIControlStateDisabled];
self.deleteButton.frame = CGRectMake(10, 15, 15, 15);
self.deleteButton.hidden = YES;
//由于不知道如何主动让cell显示右边的删除按钮,所以这里并没有给按钮添加点击事件,而是把按钮设置为不可点击状态,实际上点击响应的还是系统自带的删除按钮
self.deleteButton.enabled = NO;
self.deleteButton.backgroundColor = [UIColor whiteColor];
//这个一定要加在cell上,不能添加到contentView上,否则进入编辑模式后会跟随contentView右移
[self addSubview:self.deleteButton];
}
return self;
}
2.重写setEditing方法
- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
[super setEditing:editing animated:NO];
//控制是否显示删除按钮
self.deleteButton.hidden = !editing;
//修改右边的移动按钮的图片
if (editing) {
for (UIView * view in self.subviews) {
if ([NSStringFromClass([view class]) rangeOfString: @"Reorder"].location != NSNotFound) {
for (UIView * subview in view.subviews) {
if ([subview isKindOfClass: [UIImageView class]]) {
((UIImageView *)subview).image = [UIImage imageNamed: @"yidong"];
}
}
}
}
}
//隐藏修改编辑模式下删除按钮图片
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;
img.frame = CGRectZero;
//网上有的方法让在这边修改图片,而不是再创建一个按钮,自己尝试了下发现有图片变形,或者移动cell时仍然会显示系统图片等问题,所以我没有采用这种方法,而是在这里设置为nil
img.image = nil;
}
}
}
}
}