在UITableView中禁用滑动到删除手势

时间:2011-11-28 20:37:42

标签: objective-c ios cocoa-touch uitableview

是否可以为tableView中的行/单元禁用“滑动到删除”手势?如果是这样,你怎么做?在编辑模式下,单元格仍应可编辑,但应禁用滑动到删除手势。

4 个答案:

答案 0 :(得分:43)

以下是该做什么:

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    // Detemine if it's in editing mode
    if (self.tableView.editing) {
        return UITableViewCellEditingStyleDelete;
    }
    return UITableViewCellEditingStyleNone;
}

您仍然需要tableView:commitEditingStyle:forRowAtIndexPath:来为删除设置动画。

这是比iBrad Apps解决方案更清晰的解决方案,因为您可以使用默认的self.editButtonItem而不是自定义按钮。

链接:UITableView disable swipe to delete, but still have delete in Edit mode?

答案 1 :(得分:14)

是。下面的代码将禁用它。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}

回复您的评论:

Edit2 :我的代码可以更好地使用自定义按钮。如果您想要默认按钮,请转到@dasblinkenlight发布的链接。

所以几乎要创建一个按钮,你想要显示编辑按钮,然后调用这个方法。

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {
    [super setEditing:editing animated:animated];
    [self.tableview setEditing:editing animated:animated];
}

答案 2 :(得分:1)

Heres一个Swift版本:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    if tableView.editing {
        return UITableViewCellEditingStyle.Delete
    }
    return UITableViewCellEditingStyle.None
}

答案 3 :(得分:0)

如果您不想允许刷卡和删除某些单元格,请点击此处:

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
    if (indexPath.row == yourCellIndex) {
        return NO;
    }
    return YES;
}

也不要忘记实施此功能,以便它能够正常工作:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    if (editingStyle == UITableViewCellEditingStyleDelete) {
        // do something when deleted
    }
}