web-dev-qa-db-fra.com

Suppression d'une ligne d'un UITableView dans Swift 3?

Je suis nouveau dans le codage et l'apprentissage de Swift, je suis un tutoriel pour Swift 2 et je travaille avec Swift 3 donc il y a quelques problèmes que j'ai quand à suivre, celui-là sur lequel je suis collé.

J'ai une table de noms et je fais une fonction de balayage et de suppression pour eux qui les supprime d'une variable de noms qui est un tableau. J'ai sélectionné les fonctions qui ressemblaient le plus au didacticiel dans xcode et les ai remplies, mais mon application se bloque au hasard lorsque je clique sur le bouton Supprimer. Voici mon code pour le bouton supprimer ...

    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()
    }
40
infernouk

Fonctionne pour Swift 3 et Swift 4

Utilisez la méthode UITableViewDataSource tableView(:commit:forRowAt:), voir aussi cette réponse ici :

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)
  }
}
105
ronatory

Vous devez d'abord ajouter cette fonction

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

alors votre fonction est ok mais pas besoin de données de rechargement tableview appelez simplement tableview.beingUpdates et 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() 
    }
}
22
ivan123

In Swift 4 Essayez ceci

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()
        }
    }
9
Jaydip
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {

    if editingStyle == .delete {

        self.animals.remove(at: indexPath.row)

        self.dataDisplayTbleView.reloadData()
    }

}
4
suri

Ma réponse pour toi

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

Vous devez rafraîchir la table

1
user3182143

**

pour 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)
      }
    }
1
Govind Wadhwa