web-dev-qa-db-fra.com

supprimer une ligne en mode tableau dans swift

J'essaie de supprimer une ligne en vue tableau. J'ai mis en œuvre les méthodes requises, mais lorsque je balaie la ligne horizontalement, aucun bouton de suppression ne vient. J'ai cherché et j'ai trouvé la même solution partout mais cela ne fonctionne pas dans mon cas. Je ne sais pas où je me trompe. Quelqu'un peut-il m'aider s'il-vous-plaît? 

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
{
    return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
{
     if editingStyle == .Delete 
     {
        dataHandler.deletePeripheral(indexPath.row)
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
     }
}
11
Sunil Kumar

Si le codage ci-dessous vous aide, je serai heureux

func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
{
    return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
{
     if editingStyle == .Delete 
     {
        yourArray.removeAtIndex(indexPath.row) 
        self.tableView.reloadData()   
     }
}

Swift 3.0

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

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

Vous devez rafraîchir la table.

40
user3182143
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

        if (editingStyle == UITableViewCellEditingStyle.Delete) {


            self.tableView.beginUpdates()
            self.arrayData.removeObjectAtIndex(indexPath.row) // also remove an array object if exists.
            self.tableView.deleteRowsAtIndexPaths(NSArray(object: NSIndexPath(forRow: indexPath.row, inSection: 2)), withRowAnimation: UITableViewRowAnimation.Left)
            self.tableView.endUpdates()

        }
7
Anton

Appliquez les contraintes d'autolayout à l'affichage sous forme de tableau. Le bouton de suppression est là mais ne s'affiche pas car il n'y a pas de disposition automatique

3
Nilesh

J'ai également eu du mal à résoudre ce problème, mais j'ai finalement trouvé une solution: j'utilise XCode 8.3.2. La plupart des réponses que j'ai lues concernaient des versions antérieures de XCode/Swift et beaucoup visaient Objective-C. 

La solution que j'ai trouvée consistait à utiliser l'outil 'editActionsForRowAt' pour UITableViews. Remarque: Tout ce que je lisais me dirigeait toujours vers l'outil ' commit editorStyle ' pour UITableView, mais je ne pouvais jamais le faire fonctionner. Utiliser editActionsForRowAt a parfaitement fonctionné pour moi. 

REMARQUE: 'postData' est le nom du tableau auquel j'ai ajouté des données.

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let deleteAction = UITableViewRowAction(style: .default, title: "Delete", handler: { (action, IndexPath) in
        // Remove item from the array
        postData.remove(at: IndexPath.row)

        // Delete the row from the table view
        tableView.deleteRows(at: [IndexPath as IndexPath], with: .fade)
        })
        // set DeleteAction Button to RED (this line is optional - it simply allows you to change the color of the Delete button - remove it if you wish)
        deleteAction.backgroundColor = UIColor.red

    return [deleteAction]
}

J'ai aussi du code pour ajouter un "bouton EDIT" à côté du bouton Supprimer:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

    let editAction = UITableViewRowAction(style: .default, title: "Edit", handler: { (action, IndexPath) in
        //print("Edit tapped")
        })
        // Set EditAction button to blue (this line is not mandatory - it just sets the color of the Edit box to blue)
        editAction.backgroundColor = UIColor.blue

    let deleteAction = UITableViewRowAction(style: .default, title: "Delete", handler: { (action, IndexPath) in
        //print("Delete tapped")
        // Remove item from the array
        postData.remove(at: IndexPath.row)

        // Delete the row from the table view
        tableView.deleteRows(at: [IndexPath as IndexPath], with: .fade)
        })
        // set DeleteAction Button to RED (this line isn't mandatory - it just sets the color of the Delete box)
        deleteAction.backgroundColor = UIColor.green

    return [editAction, deleteAction]
}

EDIT: format fixe donc le code est apparu dans la boîte grise :) 

2
Geoffrey Waterson

pour Swift 3 

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete {
        dataHandler.deletePeripheral(indexPath.row) 
        tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.automatic)
        // - OR -
        // mTableView.reloadData() //mTableView is an outlet for the tableView
    }
}
2
nyxee
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
{
if editingStyle == UITableViewCellEditingStyle.Delete {
  numbers.removeAtIndex(indexPath.row)    
  tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)
}
}
2
amit gupta

je sais quel problème vous rencontrez. Je pense que vous venez de vérifier vos contraintes de table, ils peuvent être faux, il suffit de revérifier vos contraintes de mise en page automatique

0
user3610878
func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool 
{
return true
}

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
 {
 if editingStyle == .Delete 
 {
    carsArray.removeAtIndex(indexPath.row) 
    self.tableView.reloadData()   
 }
 }
0
Sai kumar Reddy
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
                if editingStyle == UITableViewCellEditingStyle.Delete { 
   yourArray.removeAtIndex(indexPath.row)

   tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic)

    }

 }
0
Silambarasan Raman