我实现了方法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];
}
如何让表视图从委托(TableViewController)中正确移动行?
答案 0 :(得分:4)
按代码移动(或添加,删除)表视图行(而不是通过用户交互)不导致 要调用的数据源方法。
如果需要执行数据源方法,则需要明确调用它:
// Move table view row:
[tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
// Call data source method:
[self tableView:tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
斯威夫特3:
// Move table view row:
tableView.moveRow(at: indexPath, to: indexPathOfLastItem)
// Call data source method:
self.tableView.moveRow(at: indexPath, to: indexPathOfLastItem)
答案 1 :(得分:2)
我认为你没有正确地调用这个方法,因为它不是一个真正的委托方法,你必须自己调用它。
尝试:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSIndexPath *indexPathOfLastItem =
[NSIndexPath indexPathForRow:([self.toDoItems count] - 1) inSection:0];
[self tableView:tableView moveRowAtIndexPath:indexPath toIndexPath:indexPathOfLastItem];
}