Reputation: 20245
I created an iOS application based on navigation-based application template, the application is backed by Core Data framework.
When clicking on Edit button, I want the rows to be reorder-able and delete-able.
When constructing cells, I added this line:
cell.showsReorderControl = YES;
And tableView:canMoveRowAtIndexPath:
method returns YES.
But the reorder control isn't displayed in the row, Am I missing something?
Upvotes: 15
Views: 10082
Reputation: 11462
try this . . .you have to implement these two methods to get that reorder control in editing mode
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
}
Upvotes: 1
Reputation: 11920
From the UITableViewCell showsReorderControl docs:
For the reordering control to appear, you must not only set this property but implement the UITableViewDataSource method tableView:moveRowAtIndexPath:toIndexPath:. In addition, if the data source implements tableView:canMoveRowAtIndexPath: to return NO, the reordering control does not appear in that designated row.
Upvotes: 31
Reputation: 78353
The UITableView also has to be in editing mode, which it's not in by default. Usually you use a button or some other control to toggle between editing mode. To put the table view in editing mode (we assume you have a UITableViewController and your tableView property is properly set, if not, adjust for your environment):
// This line somewhere inside the UITableViewController will
// animate in the various editing controls and make sure they
// show up on your table.
[[self tableView] setEditing:YES animated:YES];
Upvotes: 12