uitableviewdatasource uitableviewcontroller uitableviewcell example ios cocoa-touch uitableview uikit

ios - uitableviewcontroller - UITableView deshabilita deslizar para eliminar, pero todavía tiene eliminar en el modo de edición?



uitableviewcontroller swift 4 (5)

Básicamente, habilita o deshabilita la edición utilizando los métodos

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

Si la edición está habilitada, aparece el ícono rojo de eliminación y se solicita una confirmación de eliminación 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.

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

Cuando comento 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?


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

C objetivo

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


Solo para aclarar las cosas, deslizar para borrar no estará habilitado a menos que se 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.


Versión Swift:

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


En C #:

Tuve el mismo problema cuando era necesario habilitar / deshabilitar filas con la opción Eliminar al deslizar. Varias filas se deben deslizar hacia la izquierda y eliminar, manténgalas en otro color. Logré usar esta lógica.

[Export("tableView:canEditRowAtIndexPath:")] public bool CanEditRow(UITableView tableView, NSIndexPath indexPath) { if (deletedIndexes.Contains(indexPath.Row)){ return false; } else{ return true; } }

Tenga en cuenta que deletedIndexes es una lista de índices que se eliminan de la tabla sin duplicados. Este código verifica si se borra una fila, luego deshabilita el deslizamiento o viceversa.

La función de delegado equivalente es Swift is canEditRowAtIndexPath .