2010-09-05 10 views
7

configuro mi viewController utilizar el botón de edición de la forma de Apple recomienda:Deslizar para eliminar vs editar botón pulsado sobre el iPhone

self.navigationItem.rightBarButtonItem = self.editButtonItem; 

Cuando el usuario pulsa el botón de edición, hace que el método de setEditing:animated: desencadenar. En este método, agrego o elimino una "nueva fila" según el valor editing (es decir, una fila que el usuario puede tocar para agregar un nuevo elemento).

Cuando el usuario pasa por una celda (mientras no está en modo de edición), también llama al setEditing:animated:, lo que hace que mi código agregue esta "nueva fila" incorrectamente. Solo debe mostrar esta nueva fila cuando todo el viewController está en modo de edición (es decir, cuando se toca el botón editar).

¿Cómo puedo resolver este problema?

Respuesta

12

Si implementa tableView:willBeginEditingRowAtIndexPath: y tableView:didEndEditingRowAtIndexPath:, el comportamiento de las llamadas a métodos cambiarán ...

Ya no llamará setEditing:animated:, debe controlar toda la lógica de cambio de edición dentro de los dos métodos anteriores. Como efecto secundario de esto, self.editing ya no será YES cuando se invoca un gesto de deslizamiento. Esto se debe a que setEditing:animated: es responsable de establecer self.editing = YES.

+0

¿Puedes cambiar la imagen de eliminar? – bluezald

0

No tengo idea de lo que trata su "nueva fila", pero podría adjuntar su botón de edición a un método de ayuda que establece una bandera antes de llamar a setEditing, y allí puede verificar si dicho indicador está establecido y comportarse de acuerdo . Luego borre la bandera al final del método.

+0

¿No hay una forma de hacerlo sin anular el comportamiento del botón editar? Me gustaría utilizar la recomendación de Apple si es posible. (Aclaré la pregunta) – Senseful

+0

¿Está agregando el nuevo comportamiento estándar de fila de todos modos? Pensé que un botón "+" o "Agregar" sería la forma consistente de hacer esto. Si un usuario necesita presionar editar para agregar nuevos elementos, esto requiere muchos correos de soporte. :-) – Eiko

+0

consulte la aplicación Contactos para agregar un correo electrónico/teléfono – Senseful

0

Senseful u tiene que anular el método setEditing: animado :. o incluso puedes establecer bandera en este método como Eiko ha sugerido.

u otra manera es

u implemento barra naviagtion personalizado. en ese caso necesitas imagen de la barra de navegación y 2 botones encima. agregue el objetivo a ese botón e implemente la funcionalidad según su necesidad

3

Utilice el método UITableViewDelegatetableView:willBeginEditingRowAtIndexPath:. A partir de la documentación:

"This method is called when the user swipes horizontally across a row; as a 
consequence, the table view sets its editing property to YES (thereby entering editing 
mode) and displays a Delete button in the row identified by indexPath. In this "swipe to 
delete" mode the table view does not display any insertion, deletion, and reordering 
controls. This method gives the delegate an opportunity to adjust the application's user 
interface to editing mode. When the table exits editing mode (for example, the user taps 
the Delete button), the table view calls tableView:didEndEditingRowAtIndexPath:." 

En tableView:willBeginEditingRowAtIndexPath:, establecer un indicador de que el modo de edición ha sido activada mediante golpe eliminar. Luego, en setEditing:animated:, verifique el indicador para ver si el modo de edición se activó normalmente o usando deslizar para eliminar y realizar alguna acción basada en esa comprobación. Por último, reinicie el indicador en tableView:didEndEditingRowAtIndexPath: para que la acción predeterminada se realice cuando se presiona el botón de edición.

Cuestiones relacionadas