使用UITableViewRowAction实现UITableViewCell左滑选择
1、在iOS8后, 实现UITableView中滑动显示删除,发送,修改等更多的按钮时,只需一个代理方法和一个类即可完成.
2、iOS8的UITableViewDelegate协议中实现了一个方法,返回值是数组:
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{}
可以在方法内部写好几个按钮,然后放到数组中返回,那些按钮的类就是UITableviewRowAction
[UITableViewRowAction rowActionWithStyle:<#(UITableViewRowActionStyle)#> title:<#(nullable NSString *)#> handler:<#^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath)handler#>]
3、如果自己设定一个或多个按钮,系统自带的删除按钮就消失了
效果图
实现了UITableViewRowAction的按钮样式:
//按钮顺序
@[sendAction, deleteAction, action];
根据效果图, 和按钮的放入数组的顺序, 我们可以知道: 最先放入数组的按钮显示在最右边,最后放入的显示在最左边.
系统自带的样式:
代码:
/**
* 设置表格可编辑
*/
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath{
return YES;
}
/**
* 设置修改 cell 返回的样式
*/
- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.section == 0) {
UITableViewRowAction *sendAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"发送" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了发送");
}];
sendAction.backgroundColor = [UIColor orangeColor];
UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了删除");
}];
UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"修改" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了修改");
}];
action.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleDark];
return @[sendAction, deleteAction, action];
} else if (indexPath.section == 1){
UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"修改" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
NSLog(@"点击了修改");
}];
//毛玻璃特效类型
/**
* UIBlurEffectStyleExtraLight,
* UIBlurEffectStyleLight,
* UIBlurEffectStyleDark
*/
action.backgroundEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
return @[action];
}
return nil;
}
完整Demo: GitHub