iOS Glisser pour supprimer les lignes


Exemple

Je pense toujours qu’il est bon d’avoir un exemple très simple et autonome pour que rien ne soit supposé lorsque j’apprends une nouvelle tâche. Cette réponse est celle de la suppression des lignes UITableView . Le projet se comporte comme ceci:

gif animé montrant glisser et supprimer

Ce projet est basé sur l' exemple UITableView pour Swift .

Ajouter le code

Créez un nouveau projet et remplacez le code ViewController.swift par le suivant.

import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    
    // These strings will be the data for the table view cells
    var animals: [String] = ["Horse", "Cow", "Camel", "Pig", "Sheep", "Goat"]
    
    let cellReuseIdentifier = "cell"
    
    @IBOutlet var tableView: UITableView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // It is possible to do the following three things in the Interface Builder
        // rather than in code if you prefer.
        self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: cellReuseIdentifier)
        tableView.delegate = self
        tableView.dataSource = self
    }
    
    // number of rows in table view
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return self.animals.count
    }
    
    // create a cell for each table view row
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell:UITableViewCell = self.tableView.dequeueReusableCellWithIdentifier(cellReuseIdentifier) as UITableViewCell!
        
        cell.textLabel?.text = self.animals[indexPath.row]
        
        return cell
    }
    
    // method to run when table view cell is tapped
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        print("You tapped cell number \(indexPath.row).")
    }
    
    // this method handles row deletion
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        
        if editingStyle == .Delete {
            
            // remove the item from the data model
            animals.removeAtIndex(indexPath.row)
            
            // delete the table view row
            tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
            
        } else if editingStyle == .Insert {
            // Not used in our example, but if you were adding a new row, this is where you would do it.
        }
    }

}

La méthode de clé unique dans le code ci-dessus qui permet la suppression de lignes est la dernière. Ici c'est encore pour l'emphase:

func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    
    if editingStyle == .Delete {
        
        // remove the item from the data model
        animals.removeAtIndex(indexPath.row)
        
        // delete the table view row
        tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
    }
}

Storyboard

Ajoutez un UITableView au View Controller dans le storyboard. Utilisez la mise en page automatique pour épingler les quatre côtés de la vue de table aux bords du View Controller. Contrôlez le glissement de la vue de table dans le storyboard vers @IBOutlet var tableView: UITableView! ligne dans le code.

Fini

C'est tout. Vous devriez pouvoir exécuter votre application maintenant et supprimer des lignes en glissant vers la gauche et en appuyant sur "Supprimer".

Remarques

  • Ceci est uniquement disponible sur iOS 8. Voir cette réponse pour plus de détails.
  • Si vous devez modifier le nombre de boutons affichés ou le texte du bouton, consultez cette réponse pour plus de détails.

Lectures complémentaires