uitableviewcell dynamically automatic swift uitableview row

swift - dynamically - uitableviewautomaticdimension



¿Borrar una fila de un UITableView en Swift 3? (6)

Soy nuevo en la codificación y el aprendizaje de Swift, estoy siguiendo un tutorial para Swift 2 y trabajando con Swift 3, por lo que hay algunos problemas que tengo al seguir, este es uno en el que estoy correctamente bloqueado.

Tengo una tabla de nombres y estoy haciendo una función de barrido y borrado para ellos que los elimina de una variable de nombres que es una matriz. Seleccioné las funciones que más se parecían al tutorial dentro de xcode y las completé, pero mi aplicación se bloquea de forma aleatoria cuando hago clic en el botón Eliminar. Aquí está mi código para el botón de eliminar ...

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { let deleteAction = UITableViewRowAction(style: .destructive, title: "Delete") { (rowAction: UITableViewRowAction, indexPath: IndexPath) -> Void in print("Deleted") self.catNames.remove(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic) self.tableView.reloadData() }


**

para swift 3

**

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { print("Deleted") self.catNames.remove(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .automatic) } }


En Swift 4 Prueba esto

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == .delete) { arrStudentName.remove(at: indexPath.row) tableView.beginUpdates() tableView.deleteRows(at: [indexPath], with: .middle) tableView.endUpdates() } }


Mi respuesta para ti

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { array.remove(at: indexPath.row) tblDltRow.reloadData() } }

Necesitas refrescar la mesa.


Obras para Swift 3 y Swift 4

Use el método UITableViewDataSource tableView(:commit:forRowAt:) , vea también esta respuesta here :

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { print("Deleted") self.catNames.remove(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: .automatic) } }


Primero necesitas añadir esta función.

func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true }

entonces su función está bien, pero no es necesario que los datos de recarga de Tableview solo llamen a tableview.beingUpdates y tableview.endUpdates

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { print("Deleted") self.catNames.remove(at: indexPath.row) self.tableView.beginUpdates() self.tableView.deleteRows(at: [indexPath], with: .automatic) self.tableView.endUpdates() } }


func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { self.animals.remove(at: indexPath.row) self.dataDisplayTbleView.reloadData() } }