UITableViewController rearrange or reorder table cells example in Swift

In this video I demonstrate how to implement a feature that allows users of your mobile app to rearrange table cells. Users will be able to grab the table cell and drag and drop it at a different position in table view.

Source code:


import UIKit
class MyTableViewController: UITableViewController {var dataHolder:Array = [“One”,”Two”,”Three”]

override func viewDidLoad() {
super.viewDidLoad()

self.navigationItem.rightBarButtonItem = self.editButtonItem()
}

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 dataHolder.count
}

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(“myCell”, forIndexPath: indexPath) as! UITableViewCell

cell.textLabel?.text = dataHolder[indexPath.row]

return cell
}

override func tableView(tableView: UITableView, editingStyleForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCellEditingStyle {
return UITableViewCellEditingStyle.None
}

override func tableView(tableView: UITableView, shouldIndentWhileEditingRowAtIndexPath indexPath: NSIndexPath) -> Bool {
return false
}

// Override to support rearranging the table view.
override func tableView(tableView: UITableView, moveRowAtIndexPath fromIndexPath: NSIndexPath, toIndexPath: NSIndexPath) {

let itemToMove:String = dataHolder[fromIndexPath.row]
dataHolder.removeAtIndex(fromIndexPath.row)
dataHolder.insert(itemToMove, atIndex: toIndexPath.row)

}

// Override to support conditional rearranging of the table view.
override func tableView(tableView: UITableView, canMoveRowAtIndexPath indexPath: NSIndexPath) -> Bool {
// Return NO if you do not want the item to be re-orderable.
return true
}

}