ios - 从 TableViewController 调用 moveRowAtIndexPath

标签 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];
}

如何让 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/

相关文章:

ios - 计算截断时 UILabel 中可见字符的数量 - Xcode Swift

ios - 如何拆分 iOS sqlite 数据库?

ios - 通过字符串 Xcode 标识符访问 UILabel

ios - 核心数据跳过获取函数 Swift

Swift View Controller 声明返回 nil

Swift 2 - 当 AlertController 出现时如何切换到另一个 ViewController?

ios - Interface Builder 中的 Text Styles 是什么?

xcode - PerformSegueWithIdentifier 未进行转换

ios单击按钮更改 View

iphone - 一个 View Controller ios 的强制景观