iOS ScrollView类族iOS程序猿程序员

实现UITableView左滑自定义选项

2015-10-26  本文已影响7488人  ForeverYoung21

当UITableView进入编辑模式,在进行左滑操作的cell的右边,默认会出现Delete按钮,如何自定义左滑出现的按钮呢?

只需要实现UITableView下面的这个代理方法。

- (NSArray<UITableViewRowAction *> *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewRowAction *likeAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleNormal title:@"喜欢" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
      // 实现相关的逻辑代码
      // ...
      // 在最后希望cell可以自动回到默认状态,所以需要退出编辑模式
      tableView.editing = NO;
    }];

    UITableViewRowAction *deleteAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"删除" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) {
      // 首先改变model
      [self.books removeObjectAtIndex:indexPath.row];
      // 接着刷新view
      [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
      // 不需要主动退出编辑模式,上面更新view的操作完成后就会自动退出编辑模式
    }];

    return @[deleteAction, likeAction];
}

此时左滑就会出现两个按钮,一个是喜欢,另一个是删除。出现的顺序和在这个方法中返回的数组中的元素顺序相关。

如果实现了上述方法,那么之前提到过的tableView:commitEditingStyle:forRowAtIndexPath:tableView: titleForDeleteConfirmationButtonForRowAtIndexPath:方法就不会再调用了。(如果为了兼容以前的版本,那么需要实现tableView:commitEditingStyle:forRowAtIndexPath:方法,在这个方法里什么都不用做即可。)

上一篇 下一篇

猜你喜欢

热点阅读