iOS11 SwipeAction

2017-11-29  本文已影响16人  远辰jt
  1. iOS11之前,UITableView有相应的方法可以给指定cell添加action。效果类似于QQ会话列表的滑动删除,置顶。实现代码
//  iOS8之后的方法,即将过期可以使用iOS11新增的方法-tableView:trailingSwipeActionsConfigurationForRowAtIndexPath: 代替.
// 如果实现了该方法并且返回值不是nil,会替代 -tableView:titleForDeleteConfirmationButtonForRowAtIndexPath: 的实现
- (nullable NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewRowAction *action = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
        [self.array removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }];

    UITableViewRowAction *action2 = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@" 标记为未读 " handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {

    }];
    action2.backgroundColor = [UIColor orangeColor];
    return @[action,action2];
}

效果图


效果图.png
  1. iOS11之后新增了更强大的方法取代上述的方法,苹果也建议使用新的方法,新的API不仅可以添加右划的action,也可以添加左划的action
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath;
  1. 示例代码
- (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView leadingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath{
    UIContextualAction *action = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"删除" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
        [self.array removeObjectAtIndex:indexPath.row];
        [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationBottom];
        completionHandler(YES);
    }];

    UIContextualAction *action2 = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"标为已读" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
        completionHandler(YES);
    }];
    action2.backgroundColor = [UIColor orangeColor];

    UIContextualAction *action3 = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@"置顶" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) {
        completionHandler(YES);
    }];

    UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[action,action2,action3]];
    config.performsFirstActionWithFullSwipe = YES; // 默认值YES,控制第一个action是否支持全屏横扫(当滑动超过一定距离后会触发第一个action)
    return config;
}
leading.png
  1. 注意点
错误.png
UISwipeActionsConfiguration *config = [UISwipeActionsConfiguration configurationWithActions:@[action,action2,action3]];
config.performsFirstActionWithFullSwipe = NO;
上一篇下一篇

猜你喜欢

热点阅读