prepareForSegue从未被调用

5

我有一个包含多个单元格的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从未被调用。 我尝试过记录和设置断点,但没有任何迹象表明该方法被调用。 我错过了什么? 为什么这个方法没有被调用? 虽然它现在只有一个简单的“Hello,World”语句,但我以前有一些我的详细视图依赖的代码,它会导致异常,因为详细视图没有正确设置。
还有其他我需要注意的事情吗? 我目前没有做到的事情吗?
3个回答

6
您正在告诉iOS永远不要执行此操作:

never segue


-(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,然后它就可以工作了。或者在内部添加逻辑,当您想要转场时至少返回 YES。

如果您查看我的didSelectItemAtIndexPath方法,您会发现我正在手动执行segue。 - Shadowman
1
@Shadowman,你试过将它设置为“是”并查看是否有效吗? - David H

3
如果您设置shouldPerformSegueWithIdentifier:NO,那么PrepareForSegue将不会被调用。

2

如果您正在使用一个原型单元格(带有动态单元格),请确保在故事板中设置标识符,并在委托中使用它。我曾经遇到过这个问题,花了一点时间才弄清楚。

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

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