¿Hay alguna forma de ocultar el botón "-" (Eliminar) mientras se edita UITableView

97

En mi aplicación de iPhone, tengo un UITableView en modo de edición, donde el usuario solo puede reordenar las filas sin permiso de eliminación.

Entonces, ¿hay alguna forma en la que pueda ocultar el botón rojo "-" de TableView? Por favor hagamelo saber.

Gracias

iPhoneDev
fuente

Respuestas:

258

¡Aquí está mi solución completa, sin sangría (0 alineación izquierda) de la celda!

- (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
fuente
43

Swift 3 equivalente a la respuesta aceptada con solo las funciones necesarias:

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

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

Esto detiene la sangría:

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

Enfrenté un problema similar en el que quería que aparecieran casillas de verificación personalizadas en el modo de edición, pero no el botón de eliminar '(-)'.

La respuesta de Stefan me condujo en la dirección correcta.

Creé un botón de alternancia y lo agregué como un editionAccessoryView a la celda y lo conecté a un 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;
}

Implementó estos métodos delegados

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

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

Cuando solo desea ocultar el punto (-) mientras edita, pero es posible que desee mantener la funcionalidad de eliminación para los usuarios, la implementa así en su UITableViewDelegateclase de conformidad con el protocolo

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