5

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

我已经在我的 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从未被调用过。我试过记录,设置断点。没有迹象表明这个方法被调用过。我在这里想念什么?为什么不调用此方法?虽然它现在有一个简单的“Hello, World”语句,但我之前有我的详细视图所依赖的代码,它会导致异常,因为详细视图没有正确设置。

还有什么我在这里想念的吗?我现在不应该做的事情是什么?

4

3 回答 3

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 的逻辑。

于 2013-10-24T19:57:13.600 回答
3

PrepareForSegue如果您设置,将永远不会被调用shouldPerformSegueWithIdentifier:NO

于 2013-10-24T20:38:58.117 回答
2

Be sure if you are using a prototype cell (with Dynamic Cells) that you set the identifier in the storyboard and use it in your delegate as well. I had this issue and took me a bit to figure it out.

static NSString *cellIdent = @"prototypeCellName";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdent];
于 2014-04-07T19:40:09.593 回答