2011-04-11 18 views
5

Estoy creando una interfaz basada en tablas similar a los Contactos del iPad, en la que el usuario puede agregar a una lista de filas tocando una fila en blanco en la parte inferior. La tabla está siempre en modo de edición, y las filas que no están en blanco deben tener un icono de edición de eliminación estándar a la izquierda. Tan pronto como el usuario comience a escribir en la última fila en blanco, se debe agregar un ícono de eliminación a la izquierda (y se agrega una nueva fila en blanco).Actualizo el estilo de edición de UITableViewCell según el contenido

¿Alguien sabe cómo hacer que UITableView actualice el estilo de edición bajo demanda? Todo funciona, excepto que el ícono de eliminar no aparece hasta que el usuario se desvía de la vista y luego vuelve a la vista.

Aquí está mi aplicación editingStyleForRowAtIndexPath:

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView 
      editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (/* text field contains data */) 
    { 
     return UITableViewCellEditingStyleDelete; 
    } 
    else 
    { 
     return UITableViewCellEditingStyleNone; 
    } 
} 

Respuesta

10

Luché con este mismo problema ayer. Básicamente, debes alternar la propiedad del modo de edición de la vista de tabla. Después de hacer eso, actualizará el estilo de edición de su celda.

Aquí está el código que hace el truco para mí:

self.tableView.editing = NO; 
self.tableView.editing = YES; 

Esto le da a lo que me parece ser exactamente el mismo tipo de efecto que la aplicación de contactos. Como mínimo, actualizará su estilo de edición.

+0

Eso funciona, ¡gracias! Tal vez debería preguntar esto en una nueva pregunta, pero ¿también encontró una forma de eliminar el cursor del UITextField del respondedor activo cuando se toca el ícono de eliminar, como lo hace Contacts? –

+0

No, nunca pensé en hacer eso porque no era algo que realmente me preocupara por manejar. –

+0

Ojalá hubiera encontrado esto hace un par de horas. – smparkes

0

intente llamar reloadRowsAtIndexPaths:withRowAnimation: en la fila que se está editando. (No estoy seguro de si eso arruinará el estado del primer respondedor en su campo de texto o no).

+0

Sí, lamentablemente eso ensucia la primera respuesta. –

Cuestiones relacionadas