John Harris John Harris - 2 months ago 13
Swift Question

Deleting a tableView cell SWIFT

How can I delete a table view cell with Swift? I am using parse also. It would be great if someone can tell me how to make an action sheet asking, "Are you sure you want to delete?" If not that's okay.

Here is the code I have so far:

import UIKit

class MasterTableViewController: UITableViewController, UITableViewDelegate,
PFLogInViewControllerDelegate, PFSignUpViewControllerDelegate {

var noteObjects: NSMutableArray! = NSMutableArray()

override func viewDidLoad() {
super.viewDidLoad()

// Uncomment the following line to preserve selection between presentations
// self.clearsSelectionOnViewWillAppear = false

// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)

if (PFUser.currentUser() == nil) {

}else {
self.fetchAllObjectsFromLocalDatastore()
self.fetchAllObjects()
}
}

func fetchAllObjectsFromLocalDatastore() {

var query: PFQuery = PFQuery(className: "Note")

query.fromLocalDatastore()
query.whereKey("username", equalTo: PFUser.currentUser()!.username!)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

if (error == nil) {

var temp: NSArray = objects!; NSArray.self

self.noteObjects = temp.mutableCopy() as! NSMutableArray
self.tableView.reloadData()

}else {

}
}
}

func fetchAllObjects() {

PFObject.unpinAllObjectsInBackgroundWithBlock(nil)

var query: PFQuery = PFQuery(className: "Note")

query.whereKey("username", equalTo: PFUser.currentUser()!.username!)
query.findObjectsInBackgroundWithBlock { (objects, error) -> Void in

if (error == nil) {

PFObject.pinAllInBackground(objects, block: { (success, error) in
if error == nil {
self.fetchAllObjectsFromLocalDatastore()
}
})
}else {

println(error!.userInfo)

}
}
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}

// MARK: - Table view data source

override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
// #warning Potentially incomplete method implementation.
// Return the number of sections.
return 1
}

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete method implementation.
// Return the number of rows in the section.
return self.noteObjects.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! MasterTableViewCell

var object: PFObject = self.noteObjects.objectAtIndex(indexPath.row) as! PFObject

cell.masterTitleLabel?.text = object["title"] as? String
cell.masterTextLabel?.text = object["text"] as? String

return cell
}

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

self.performSegueWithIdentifier("editNote", sender: self)
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var upcoming: AddNoteTableViewController = segue.destinationViewController as! AddNoteTableViewController

if (segue.identifier == "editNote") {

let indexPath = self.tableView.indexPathForSelectedRow()!

var object: PFObject = self.noteObjects.objectAtIndex(indexPath.row) as! PFObject

upcoming.object = object

self.tableView.deselectRowAtIndexPath(indexPath, animated: true)

}
}
}

Answer

Implement commitEditingStyle method of tableview :

override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
    if editingStyle == .Delete {
        let alert = UIAlertController(title: "Delete Note", message: "Are you sure you want to delete this note?", preferredStyle: .ActionSheet)

        alert.addAction(UIAlertAction(title: "Yes", style: .Destructive, handler: {
            (alert:UIAlertAction!) in
            //****//
             your code to delete item from parse.
            // ***//
             //And then remove object from tableview
             self.noteObjects.removeAtIndex(indexPath.row)
             self.tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)
        }))
        alert.addAction(UIAlertAction(title: "No", style: .Cancel, handler: nil))

        self.presentViewController(alert, animated: true, completion: nil)
    }
}

Delete button will be visible on swiping left specific table cell Hope this will help!

Comments