我实现了 moveRowAtIndexPath:toIndexPath: 方法的主体,如下所示:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
{
XYZToDoItem *itemToMove = [self.toDoItems objectAtIndex:fromIndexPath.row];
NSLog(@"Moving");
NSLog( itemToMove.itemName);
[self.toDoItems removeObjectAtIndex:fromIndexPath.row];
[self.toDoItems insertObject:itemToMove atIndex:toIndexPath.row];
}
我想从 TableViewController 的 didSelectRowAtIndexPath
方法中调用此方法。
当我这样做时,表格的行确实移动了,但上面的方法似乎没有执行。没有任何内容会记录到控制台,并且数组 toDoItems
中的项目不会交换。
这是该方法的主体:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *indexPathOfLastItem =
[NSIndexPath indexPathForRow:([self.toDoItems count] - 1) inSection:0];
[tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
}
如何让 TableView 从委托(delegate)(TableViewController)中正确移动行?
最佳答案
通过代码(而不是通过用户交互)移动(或添加、删除)表格 View 行不会导致 要调用的数据源方法。
如果需要数据源方法执行,需要显式调用:
// Move table view row:
[tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
// Call data source method:
[self tableView:tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
swift 3:
// Move table view row:
tableView.moveRow(at: indexPath, to: indexPathOfLastItem)
// Call data source method:
self.tableView.moveRow(at: indexPath, to: indexPathOfLastItem)
关于ios - 从 TableViewController 调用 moveRowAtIndexPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959111/