UITableView deshabilitar deslizar para eliminar, pero aún tiene eliminar en modo Edición?

Quiero algo similar a la aplicación de Alarma, donde no puedes deslizar eliminar la fila, pero puedes eliminar la fila en modo Edición.

Cuando se comentó tableView: commitEditingStyle: forRowAtIndexPath:, deshabilité el slider para eliminar y aún tenía el button Eliminar en el modo Edición, pero qué sucede cuando presiono el button Eliminar. ¿Qué se llama?

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

C objective

- (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 } 

Todavía debe implementar tableView:commitEditingStyle:forRowAtIndexPath: para confirmar la eliminación.

Solo para dejar las cosas claras, swipe-to-delete no estará habilitado a less que tableView:commitEditingStyle:forRowAtIndexPath: esté implementado.

Mientras estaba en desarrollo, no lo implementé y, por lo tanto, no se habilitó swipe-to-delete. Por supuesto, en una aplicación terminada, siempre se implementaría, porque de lo contrario no habría edición.

Versión Swift:

 override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle { if(do something){ return UITableViewCellEditingStyle.Delete or UITableViewCellEditingStyle.Insert } return UITableViewCellEditingStyle.None } 

Básicamente, habilita o deshabilita la edición utilizando los methods

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

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

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

es notificado de la request de eliminación. Si implementa este método, entonces 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, a mi leal saber y entender, no puede lograr lo que solicitó, a less que utilice algunas API privadas no documentadas. Probablemente así sea como se implementa la aplicación Apple.