I have one tableView in my storyBoard, where I added 4 static cells to it, and my storyBoard looks like this:

I have no data source for this tableView , because my cells are static.
And I use the code below to drag and drop a cell, and it works fine until I scroll through the table.
import UIKit class TableViewController: UITableViewController { var sourceIndexPath: NSIndexPath = NSIndexPath() var snapshot: UIView = UIView() let longPress: UILongPressGestureRecognizer = { let recognizer = UILongPressGestureRecognizer() return recognizer }() override func viewDidLoad() { super.viewDidLoad() longPress.addTarget(self, action: "longPressGestureRecognized:") self.tableView.addGestureRecognizer(longPress) self.tableView.allowsSelection = false } override func viewWillAppear(animated: Bool) { self.tableView.reloadData() } // MARK: UIGestureRecognizer func longPressGestureRecognized(gesture: UILongPressGestureRecognizer){ let state: UIGestureRecognizerState = gesture.state let location:CGPoint = gesture.locationInView(self.tableView) if let indexPath: NSIndexPath = self.tableView.indexPathForRowAtPoint(location){ switch(state){ case UIGestureRecognizerState.Began: sourceIndexPath = indexPath let cell: UITableViewCell = self.tableView .cellForRowAtIndexPath(indexPath)! //take a snapshot of the selected row using helper method snapshot = customSnapshotFromView(cell) //add snapshot as subview, centered at cell center var center: CGPoint = cell.center snapshot.center = center snapshot.alpha = 0.0 self.tableView.addSubview(snapshot) UIView.animateWithDuration(0.25, animations: { () -> Void in center.y = location.y self.snapshot.center = center self.snapshot.transform = CGAffineTransformMakeScale(1.05, 1.05) self.snapshot.alpha = 0.98 cell.alpha = 0.0 }, completion: { (finished) in cell.hidden = true }) case UIGestureRecognizerState.Changed: let cell: UITableViewCell = self.tableView.cellForRowAtIndexPath(indexPath)! var center: CGPoint = snapshot.center center.y = location.y snapshot.center = center print("location \(location.y)") //is destination valid and is it different form source? if indexPath != sourceIndexPath{ //update data source //I have commented this part because I am not using any dataSource. // self.customArray.exchangeObjectAtIndex(indexPath.row, withObjectAtIndex: sourceIndexPath.row) //move the row self.tableView.moveRowAtIndexPath(sourceIndexPath, toIndexPath: indexPath) //and update source so it is in sync with UI changes sourceIndexPath = indexPath } if (location.y < 68) || (location.y > 450) { print("cancelled") self.snapshot.alpha = 0.0 cell.hidden = false UIView.animateWithDuration(0.10, animations: { () -> Void in self.snapshot.center = cell.center self.snapshot.transform = CGAffineTransformIdentity self.snapshot.alpha = 0.0 //undo fade out cell.alpha = 1.0 }, completion: { (finished) in self.snapshot.removeFromSuperview() }) } case UIGestureRecognizerState.Ended: //clean up print("ended") let cell: UITableViewCell = tableView.cellForRowAtIndexPath(indexPath)! cell.hidden = false UIView.animateWithDuration(0.25, animations: { () -> Void in self.snapshot.center = cell.center self.snapshot.transform = CGAffineTransformIdentity self.snapshot.alpha = 0.0 //undo fade out cell.alpha = 1.0 }, completion: { (finished) in self.snapshot.removeFromSuperview() }) break default: break } }else{ gesture.cancelsTouchesInView = true } } func customSnapshotFromView(inputView: UIView) -> UIView { // Make an image from the input view. UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, false, 0) inputView.layer.renderInContext(UIGraphicsGetCurrentContext()!) let image = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext(); // Create an image view. let snapshot = UIImageView(image: image) snapshot.layer.masksToBounds = false snapshot.layer.cornerRadius = 0.0 snapshot.layer.shadowOffset = CGSize(width: -5.0, height: 0.0) snapshot.layer.shadowRadius = 5.0 snapshot.layer.shadowOpacity = 0.4 return snapshot } }
When I scroll after dragging and dropping, it looks like this:

As you can see, the cell does not appear again. I want to drag a static cell, and I want to keep its position, so I wonβt switch again when scrolling.
An example for more information.
This is just a demo project. But I added a lot of elements to my cell, and each cell has different interfaces.