Existe alguma maneira de ocultar o botão “-” (Excluir) durante a edição de UITableView

97

No meu aplicativo para iphone, eu tenho um UITableView no modo de edição, onde o usuário tem permissão apenas para reordenar as linhas, sem permissão de exclusão.

Então, há alguma maneira de esconder o botão vermelho "-" do TableView. Por favor deixe-me saber.

obrigado

iPhoneDev
fonte

Respostas:

258

Aqui está minha solução completa, sem recuo (0 alinhamento à esquerda) da célula!

- (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;
}
Stefan von Chossy
fonte
43

Swift 3 equivale à resposta aceita com apenas as funções necessárias:

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

func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle {
    return .none
}
Antoine
fonte
4

Isso interrompe a indentação:

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

Eu enfrentei um problema semelhante em que queria que as caixas de seleção personalizadas aparecessem no modo Editar, mas não o botão '(-)' excluir.

A resposta de Stefan me conduziu na direção correta.

Eu criei um botão de alternância e o adicionei como uma ediçãoAccessoryView para a célula e conectei-o a um método.

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

Implementado esses métodos delegados

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

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

Quando você deseja apenas ocultar o ponto (-) durante a edição, mas pode querer manter a funcionalidade de exclusão para os usuários, você a implementa como em sua UITableViewDelegateclasse de conformidade de protocolo

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath {
    if (self.editing) return UITableViewCellEditingStyleNone;
    return UITableViewCellEditingStyleDelete;
}
Ol Sen
fonte