从TableViewController调用moveRowAtIndexPath

时间:2014-01-06 20:57:05

标签: ios viewcontroller

我实现了方法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)中正确移动行?

2 个答案:

答案 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];
}