UITableView行被选中时为什么prepareForSegue方法没有被调用?

13

我使用 NSFetchedResultsController 构建了一个 UITableView,并显示了一些原型 UITableViewCell。我已经从我的 UITableViewCell 连接到了 DetailViewController 的 push segue。

在我的 TableViewController 中,我实现了以下两个方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"%s", __PRETTY_FUNCTION__);
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    NSLog(@"%s", __PRETTY_FUNCTION__);
}

当我运行应用程序并在tableView中点击一行时,我的应用程序只调用:

[TableViewController tableView:didSelectRowAtIndexPath:]
[TableViewController tableView:didSelectRowAtIndexPath:]
[TableViewController tableView:didSelectRowAtIndexPath:]
如果我删除segue并从UIBarButtonItem将其重新连接到DetailViewController,那么segue会正确调用,有人能想到我错过了什么吗?

编辑:

添加:

- (IBAction)tester:(id)sender {
    [self performSegueWithIdentifier:@"SEGTEST" sender:nil];
}

我将其连接到名为“tester”的UIButtonBarItem上,它可以工作,但当我从UITableViewCell链接到控制器时,仍然无法触发它。


为什么不直接从一个 ViewController 链接到另一个 ViewController,在 didSelectCell 方法中调用它,像我下面的答案一样呢? - Darren
我想我可以这样做,但我更好奇的是为什么它没有触发。我能看出来这个版本和我有一个工作的版本唯一的区别就是这个版本使用了核心数据和UIFetchedResultsController,虽然我不知道这应该有什么影响。 - fuzzygoat
2个回答

31

经过一番挖掘,我最终发现UITableViewCell标识符设置错误为"CELL_ID",而应该是"PLANTCELL_ID"。

所以对于任何发现在UITableView中选择一个UITableViewCell没有调用相关segue的人来说,请检查你的单元格标识符在故事板和tableView:cellForRowAtIndexPath:方法中是否正确设置。


6
重新设置你的Segue,从ViewController本身开始,并给它命名。 然后在didSelectRow方法中调用它。
[self performSegueWithIdentifier:@"yourSegueName"];    

检查并观察是否触发。


确实会触发,但我们如何将数据传递给已实例化的场景/视图? - T. Ujasiri
您可以使用 prepareForSegue 方法。 - Darren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接