您的位置:首页 > 产品设计 > UI/UE

自定义 UITableViewRowAction

2016-05-03 15:40 435 查看
先上图



这个就是要完成的结果

自定义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”的宽度,大功告成!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息