【问题标题】:prepareForSegue not called when UITableView row selected?选择 UITableView 行时未调用 prepareForSegue?
【发布时间】:2012-02-22 18:05:30
【问题描述】:

我已经使用 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 方法中调用它呢?
  • 我猜是可以的,我更好奇为什么它没有触发。我可以看到这个版本和我拥有的工作版本之间的唯一区别是这个版本使用 Core Data 和 UIFetchedResultsController,虽然我看不出这应该有什么关系。

标签: iphone objective-c uitableview segue


【解决方案1】:

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

对于发现在 UITableView 中选择 UITableViewCell 不会调用关联的 segue 的其他人,请检查您的单元格标识符是否在情节提要和 tableView:cellForRowAtIndexPath: 中设置正确 .

【讨论】:

    【解决方案2】:

    ViewController 本身重新连接您的segue,并为其命名。 然后在didSelectRow方法调用

    [self performSegueWithIdentifier:@"yourSegueName"];    
    

    看看它是否会触发。

    【讨论】:

    • 它确实会触发,但是我们如何将数据传递给实例化的场景/视图。
    • 你使用 prepareForSegue 方法。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多