prepareForSegue从未被召唤过

时间:2013-10-24 19:52:08

标签: ios objective-c storyboard uicollectionview segue

我有一个由众多单元格组成的UICollectionView。我希望能够点击其中一个单元格,并在确定这是适当的操作后让我的故事板转向另一个视图控制器。

我在Storyboard中创建了辅助视图控制器以及segue。在我的UICollectionView子类中,我实现了以下...

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    return NO; // So that I can determine whether or not to perform the segue based on app logic
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    [collectionView deselectItemAtIndexPath:indexPath animated:YES];

    // Selection logic here
    [self performSegueWithIdentifier:@"showDetailView" sender:self];
}

在本课程中,我还实现了 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender,允许我在执行segue之前设置我的详细视图。它看起来像这样:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
   NSLog(@"HELLO, WORLD!!!");
}

一切似乎都井然有序,但我发现永远不会召唤prepareForSegue。我已经尝试过记录,设置断点。没有迹象表明这种方法被称为EVER。我在这里错过了什么?为什么不调用此方法?虽然它现在有一个简单的“Hello,World”语句,但我之前有我的详细信息视图所依赖的代码,它会导致异常,因为详细视图设置不正确。

我在这里还有其他的东西吗?我应该做的事情,我现在不在吗?

3 个答案:

答案 0 :(得分:6)

你告诉iOS永远不要吝啬:

-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    return NO; // So that I can determine whether or not to perform the segue based on app logic
}

将NO更改为YES,它应该可以正常工作。或者在里面添加逻辑,当你想要segue时,至少返回YES。

答案 1 :(得分:3)

如果您设置PrepareForSegue,则永远不会调用{p> shouldPerformSegueWithIdentifier:NO

答案 2 :(得分:2)

确保您使用的是原型单元格(使用动态单元格) 故事板中的标识符,也可以在您的委托中使用它。我有这个问题 并带我了解一下。

static NSString *cellIdent = @"prototypeCellName";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];