Подтвердить что ты не робот

Отключить жестов для перехода по экрану в UITableView

Можно ли отключить жест 'swipe-to-delete' для строки/ячейки в tableView? Если так, то как ты это делаешь? Ячейка все еще должна быть доступна для редактирования в режиме EDIT, но жест жестки для удаления должен быть отключен.

4b9b3361

Ответ 1

Здесь что делать:

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

Для анимации удаления вам еще нужно tableView:commitEditingStyle:forRowAtIndexPath:.

Это гораздо более чистое решение, чем решение iBrad Apps, поскольку вместо пользовательской кнопки вы можете использовать self.editButtonItem по умолчанию.

Ссылка: UITableView отключить прокрутку для удаления, но все же удалить в режиме редактирования?

Ответ 2

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

- (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];
}

Ответ 3

Вот версия Swift:

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

Ответ 4

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

- (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
    }
}