我正在尝试使我的UITableView可编辑,以便您可以移动单元格。现在当我点击编辑按钮时,它只允许我删除但不重新安排。
我的方法是:
Code:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)setEditing:(BOOL)editing animated:(BOOL)animate
{
[self.routineTableView setEditing: !self.routineTableView.editing animated:YES];
if (self.routineTableView.editing)
[self.navigationItem.leftBarButtonItem setTitle:@"Done"];
else
[self.navigationItem.leftBarButtonItem setTitle:@"Edit"];
}
-(void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSLog(@"fetched results : \n%@\n",[self.fetchedResultsController fetchedObjects]);
NSError *error = nil;
if (![managedObjectContext save:&error])
{
// Handle the error.
}
}
- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
答案 0 :(得分:8)
为了正确实现重新排序行,表视图数据源应该实现如下方法:
-(BOOL)tableView:(UITableView *)tableView
canMoveRowAtIndexPath:(NSIndexPath *)indexPath;
-(void)tableView:(UITableView *)tableView
moveRowAtIndexPath:(NSIndexPath *)fromIndexPath
toIndexPath:(NSIndexPath *)toIndexPath;
及其代表可以实施:
-(NSIndexPath *)tableView:(UITableView *)tableView
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath;
还有这个page为您提供代码示例。
答案 1 :(得分:2)
你必须阅读documentation。您还可以在那里获得相关的示例代码。
当表格视图进入编辑模式并且用户拖动重新排序时 在表中,表视图向其数据源发送一系列消息 和委托,但只有他们实施这些方法。这些方法 允许数据源和委托限制行和是否以及在哪里 也可以移动以进行实际的移动操作。