Today, I had to implement UITableView row re-ordering for the first time. The cells had
showsReorderControl set to YES, and my delegate was implementing
tableView:canMoveRowAtIndexPath: returning YES and still the handles would not show when
tableView.editing was set to YES.
The solution? Your dataSource must also implement
tableView:moveRowAtIndexPath:toIndexPath: for the handles to show, even if it does nothing – although it must do something to have any lasting effect on your model. The docs do state this but it is easily missed.