Есть ли способ скрыть кнопку «-» (Удалить) при редактировании UITableView

97

В моем приложении для iphone у меня есть UITableView в режиме редактирования, где пользователю разрешено только переупорядочивать строки, разрешение на удаление не предоставляется.

Так есть ли способ скрыть "-" красную кнопку из TableView. Пожалуйста, дайте мне знать.

Спасибо

iPhoneDev
источник

Ответы:

259

Вот мое полное решение без отступа (выравнивание 0 по левому краю) ячейки!

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

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath{
    return UITableViewCellEditingStyleNone; 
}

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


- (BOOL)tableView:(UITableView *)tableview canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
    return YES;
}
Стефан фон Чосси
источник
43

Swift 3 эквивалент принятого ответа только с необходимыми функциями:

func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool {
    return false
}

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}
Антуан
источник
4

Это останавливает отступ:

- (BOOL)tableView:(UITableView *)tableview shouldIndentWhileEditingRowAtIndexPath:(NSIndexPath *)indexPath {
    return NO;
}
Sethtc
источник
3

Я столкнулся с аналогичной проблемой, когда я хотел, чтобы в режиме редактирования отображались настраиваемые флажки, но не кнопка удаления '(-)'.

Ответ Стефана направил меня в правильном направлении.

Я создал кнопку-переключатель и добавил его как EditorAccessoryView в ячейку и связал его с методом.

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    ....
    // Configure the cell...

    UIButton *checkBoxButton = [[UIButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 32.0f)];
    [checkBoxButton setTitle:@"O" forState:UIControlStateNormal];
    [checkBoxButton setTitle:@"√" forState:UIControlStateSelected];
    [checkBoxButton addTarget:self action:@selector(checkBoxButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    cell.editingAccessoryType = UITableViewCellAccessoryCheckmark;
    cell.editingAccessoryView = checkBoxButton;

    return cell;
}

- (void)checkBoxButtonPressed:(UIButton *)sender {
    sender.selected = !sender.selected;
}

Реализованы эти методы делегата

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

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewCellEditingStyleNone;
}
шик
источник
0

Если вы хотите скрыть только точку (-) во время редактирования, но вы можете сохранить функцию удаления для пользователей, вы реализуете ее так же в своем UITableViewDelegateклассе, соответствующем протоколу

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.editing) return UITableViewCellEditingStyleNone;
    return UITableViewCellEditingStyleDelete;
}
Ol Sen
источник