先上图
这个就是要完成的结果
自定义UITableViewCell,相信MVC模式下的你,肯定自定义了,
然后重写一个方法
- (void)didTransitionToState:(UITableViewCellStateMask)state{
[super didTransitionToState:state];
if ((state & UITableViewCellStateShowingDeleteConfirmationMask) == UITableViewCellStateShowingDeleteConfirmationMask) {
dispatch_async(dispatch_get_main_queue(), ^{ //必须在主线程
for (UIView* subview in self.subviews) {
if ([NSStringFromClass([subview class]) isEqualToString:@"UITableViewCellDeleteConfirmationView"]) {
//删除系统的那个删除按钮
[subview.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
subview.backgroundColor = [UIColor clearColor];
//添加按钮
UIButton* editBtn = [UIButton buttonWithType:UIButtonTypeCustom];
editBtn.frame = CGRectMake(10, 4, 50, 65);
[editBtn setBackgroundImage:[UIImage imageNamed:@"taskEditAction"] forState:UIControlStateNormal];
editBtn.adjustsImageWhenHighlighted = NO;
[editBtn addTarget:self action:@selector(actionHandel) forControlEvents:UIControlEventTouchUpInside];
[subview addSubview:editBtn];
UIButton* deleteBtn = [UIButton buttonWithType:UIButtonTypeCustom];
deleteBtn.frame = CGRectMake(60, 4, 50, 65);
[deleteBtn setBackgroundImage:[UIImage imageNamed:@"taskDeleteAction"] forState:UIControlStateNormal];
deleteBtn.adjustsImageWhenHighlighted = NO;
[deleteBtn addTarget:self action:@selector(actionHandel) forControlEvents:UIControlEventTouchUpInside];
[subview addSubview:deleteBtn];
}
}
});
}
}
然后看结果,上图,
你肯能会出现这个情况,这个是因为”UITableViewCellDeleteConfirmationView”没有那么宽,放不下两个按钮,怎么办
执行这个方法
- (NSString*)tableView:(UITableView *)tableView titleForDeleteConfirmationButtonForRowAtIndexPath:(NSIndexPath *)indexPath{
return @"AAAAAAA";
}
这个方法可以定义”UITableViewCellDeleteConfirmationView”的宽度,大功告成!!