2009-06-09 18 views
79

Quiero algo similar a la aplicación de alarma, donde no puede deslizar eliminar la fila, pero aún puede eliminar la fila en el modo de edición.UITableView inhabilitar deslizar para eliminar, pero todavía tiene eliminar en el modo de edición?

Cuando se comentó tableView: commitEditingStyle: forRowAtIndexPath :, deshabilité el deslizamiento para eliminar y todavía tenía el botón Eliminar en el modo de edición, pero qué sucede cuando presiono el botón Eliminar. ¿Qué se llama?

Respuesta

258

Ok, resulta ser bastante fácil. Esto es lo que hice para resolver esto:

Objective-C

- (UITableViewCellEditingStyle)tableView:(UITableView *)aTableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Detemine if it's in editing mode 
    if (self.tableView.editing) 
    { 
     return UITableViewCellEditingStyleDelete; 
    } 

    return UITableViewCellEditingStyleNone; 
} 

Swift 2

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { 
    if tableView.editing { 
     return .Delete 
    } 

    return .None 
} 

Swift 3

override func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCellEditingStyle { 
    if tableView.isEditing { 
     return .delete 
    } 

    return .none 
} 

Aún necesita implementar tableView:commitEditingStyle:forRowAtIndexPath: para confirmar la eliminación.

+0

bu y deslizar para borrar se habilita automáticamente, nuevamente. ¿O no? –

+0

No, deslizar para eliminar no se habilita, si no está en modo de edición. Es por eso que devuelvo UITableViewCellEditingStyleNone como predeterminado. – willi

+3

Ha olvidado mencionar que necesita if (editingStyle == UITableViewCellEditingStyleDelete) en commitEditingStyle: – willi

1

Básicamente, permite activar o desactivar la edición usando los métodos

- (void)setEditing:(BOOL)editing animated:(BOOL)animated 

Si la edición está habilitada, la eliminación icono rojo aparece, y una conformación de eliminación solicitada al usuario. Si el usuario confirma, el método delegado

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 

es notificado de la solicitud de eliminación. Si implementa este método, deslizar para eliminar se activa automáticamente. Si no implementa este método, deslizar para eliminar no está activo, sin embargo, no puede eliminar la fila. Por lo tanto, según mi leal saber y entender, no puedes lograr lo que pediste, a menos que uses algunas API privadas no documentadas. Probablemente así es como se implementa la aplicación de Apple.

+1

que resolvió este por el retorno del UITableViewCellEditingStyleDelete en tableView: editingStyleForRowAtIndexPath: si está en modo de edición. – willi

8

Para aclarar las cosas, deslizar para eliminar no se habilitará a menos que se implemente tableView:commitEditingStyle:forRowAtIndexPath:.

Mientras estaba en desarrollo, no lo implementé y, por lo tanto, deslizar para eliminar no estaba habilitado. Por supuesto, en una aplicación terminada, siempre se implementaría, porque de lo contrario no habría edición.

3

Swift Versión:

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { 

    if(do something){ 

     return UITableViewCellEditingStyle.Delete or UITableViewCellEditingStyle.Insert 

    } 
    return UITableViewCellEditingStyle.None 

} 
Cuestiones relacionadas