Отключить жест смахивания для удаления в UITableView - PullRequest
20 голосов
/ 29 ноября 2011

Можно ли отключить жест «смахивание для удаления» для строки / ячейки в табличном представлении? Если так, то как ты это делаешь? Ячейка все еще должна быть редактируемой в режиме РЕДАКТИРОВАНИЯ, но жест смахивания для удаления должен быть отключен.

Ответы [ 4 ]

43 голосов
/ 29 ноября 2011

Вот что нужно сделать:

- (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 отключить салфетки для удаления, но все еще есть удаление в режиме редактирования?

14 голосов
/ 29 ноября 2011

Да. Код ниже отключит его.

- (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];
}
1 голос
/ 30 октября 2015

Вот версия Swift:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
    if tableView.editing {
        return UITableViewCellEditingStyle.Delete
    }
    return UITableViewCellEditingStyle.None
}
0 голосов
/ 09 июля 2015

Если вы не хотите разрешать или удалять определенные ячейки, вот решение:

- (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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...