Eban Stern
Eban Stern

Reputation: 1

How to add swipe to remove table cells from UITableViewController in Swift?

There aren't very many tutorials for this for Swift 5.1 and I am pretty novice. I am wondering how to make the tableView delete override func work for my code. It gives me an error on objects because they are an unresolved identifier. Also what would go in the insert?

 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return posts.count

}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")
    let mainImageView = cell?.viewWithTag(2) as! UIImageView
    mainImageView.image = posts[indexPath.row].mainImage
    let mainLabel = cell?.viewWithTag(1) as! UILabel
    mainLabel.text = posts[indexPath.row].name
    return cell!
}

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        objects.remove(at: indexPath.row) // Here I get an error because objects is an unresolved identifier. 
        tableView.deleteRows(at: [indexPath], with: .fade)
    } else if editingStyle == .insert {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view. I am also confused as to what goes here. 
    }
}

Upvotes: 0

Views: 130

Answers (2)

Apps Maven
Apps Maven

Reputation: 1420

Here you are using an object to remove data for the index path which is wrong you are using "posts" named array to show values on the table view. So, this "posts" array contains objects which are visible on the table view. So, here when you want to remove object then this means you have to remove objects from the "posts" array. Below the attached function with some changes, you can check this it will work for you.

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
    posts.remove(at: indexPath.row) // Here I get an error because objects is an unresolved identifier. 
    tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {  
    posts.append("Here insert what you want") //inside append you can append/insert values to the array
    tableView.reloadData()
}
}

Upvotes: 0

Michael Wells
Michael Wells

Reputation: 596

All of the information you will need can be found here.

This method allows the delegate to customize the editing style of the cell located atindexPath. If the delegate does not implement this method and the UITableViewCell object is editable (that is, it has its isEditing property set to true), the cell has the UITableViewCell.EditingStyle.delete style set for it.

This is what you are missing:

https://developer.apple.com/documentation/uikit/uitableviewdelegate/1614869-tableview

override func tableView(_ tableView: UITableView, 
   editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle {
return .delete
}

Upvotes: 1

Related Questions