2010-06-15 21 views
44

Tengo un UITableViewController donde el usuario debería ser capaz de editar los elementos. Con el fin de permitir la edición utilizo este:Al editar, `UITableView` no llama a didSelectRowAtIndexPath ??

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Para todo aquel que no sabe dónde proviene de self.editButtonItem, que está predefinida por el SDK.

lo tanto, ahora cuando pulso sobre cualquier tema, este método se llama:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 

pero tan pronto como me golpeó el botón de edición y durante la edición está activo, este método no parecía ser llamado.

¿Alguna idea de lo que me falta?

Este es el resto del código que está relacionado con la edición:

// Override to support conditional editing of the table view. 
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Return NO if you do not want the specified item to be editable. 
    return YES; 
} 

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


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

Gracias por la ayuda.

MCB

Respuesta

114

Tienes que establece la propiedad allowsSelectionDuringEditing de UITableView true.

Referencia: UITableView - allowsSelectionDuringEditing

+0

Eso es exactamente lo que me faltaba, Gracias – elementsense

+2

Respuesta mágica .. _superTableView.allowsSelectionDuringEditing = true; y _superTableView.allowsSelection = true; ¡¡Gracias!! – Fattie

+4

Cuatro años después, ¡y todavía estás salvando vidas! – thomax

0

¿Establece la self.editing = YES cuando se pulsa el botón de edición?

En el modo de edición de este método se llama, en lugar de didSelectRow cuando se toca una fila:

tableView:commitEditingStyle:forRowAtIndexPath:. 
+0

im no estoy seguro si su reclamo es verdadero, commitediting obtiene caleld cuando en realidad elimina o edita la celda ...lee mi respuesta, esa es la forma de obtener las rellamadas de theSelectRow al editar – Daniel

+0

¡Hola, por supuesto que tienes toda la razón! No estaba prestando atención:/lo siento. – RickiG

-2

pero tan pronto como me golpeó el botón de edición y durante la edición está activo, este método no parecía ser llamado.

¿Alguna idea de lo que me falta?

Sí. Espera llamar al tableView:didSelectRowAtIndexPath: cuando se toca un botón en su barra de navegación. Esto nunca sucederá. Ese método solo se llama cuando se selecciona una fila.

Cuando se toca el botón editar, querrá poner su tabla en modo de edición. En el controlador de vista:

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 
{ 
    [super setEditing:editing animated:animated]; // must be called first according to Apple docs 

    [self.tableView setEditing:editing animated:animated]; 
} 

Entonces usted manejar la edición de eventos mediante la adición de un método tableView:commitEditingStyle:forRowAtIndexPath:.

+1

Se pregunta por qué isnt didSelectRow no se llama mientras está editando, no espera que ocurra cuando toca edit – Daniel

+0

@Daniel Si miras de cerca, verás que respondí la pregunta tal como fue planteada. –

0

He resuelto este problema de otra manera. Mi botón Editar estaba en mi propia barra de navegación y esa fue la razón por la que no fue llamado. Después de haber incrustado VC dentro del Controlador de navegación y poner el nuevo botón Editar dentro de su Elemento de navegación, el botón Editar comenzó a llamarse.

Cuestiones relacionadas