0

我正在尝试在代码中进行搜索。prepareForSegue 函数运行并显示正确的目标视图控制器,但没有任何反应。关于我缺少什么或配置错误的任何想法?

查看控制器可能的路径:

A ->B (sgueResultat)
or
A->C (sgueStopSplash)

选择segue的代码:

if (proversion)
    [self performSegueWithIdentifier:@"sgueResultat" sender:self];

}
else {
    [self performSegueWithIdentifier:@"sgueStopSplash" sender:self];

}

`

我可以确认的 prepareForSegue 由 NSLog 运行:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
 NSLog(@"Source Controller = %@", [segue sourceViewController]);
 NSLog(@"Destination Controller = %@", [segue destinationViewController]);
 NSLog(@"Segue Identifier = %@", [segue identifier]);

nslog 输出:

2012-06-26 22:22:26.002 ClosetV2[2333:fb03] Source Controller = <ABStartViewController: 0xeb12270>
2012-06-26 22:22:26.002 ClosetV2[2333:fb03] Destination Controller = <SplashAfterStopViewController: 0x6b2c9e0>
2012-06-26 22:22:26.003 ClosetV2[2333:fb03] Segue Identifier = sgueStopSplash
2012-06-26 22:22:26.003 ClosetV2[2333:fb03] sgueStopSplash

问候安德烈亚斯

4

1 回答 1

0

确保在故事板中将 segues 设置为“模态”(如果您喜欢,也可以自定义)。

我记得当故事板问世时我第一次开始使用 segues 时,我一直在尝试使用推送,只有当你有一个嵌入式 UINavigationController 时你才能做到这一点。否则,push segue 将根本不起作用。

另一个想法……下面的代码在哪里执行?如果动画已经发生或者当前视图没有显示在屏幕上,它就不能正常工作。例如,如果您的 viewDidLoad 中有此代码,它将不起作用。

if (proversion)
    [self performSegueWithIdentifier:@"sgueResultat" sender:self];

}
else {
    [self performSegueWithIdentifier:@"sgueStopSplash" sender:self];

}

编辑:更新的答案

在执行 segue 之前等待 [self dismissModalViewController:YES] 动画完成实际上很烦人并且有些混乱。我认为没有“正确”的方法可以做到这一点。但是,如果您将以下方法放在具有模态控制器的视图中,并在使用 [self dismissModalViewController:YES] 后向其发送消息,您应该处于良好状态。

- (void)waitUntilModalControllerIsDismissed
{
    if(self.modalViewController)
    {
        [self performSelector:@selector(waitUntilModalControllerIsDismissed:)
                   withObject:nil 
                   afterDelay:0.1f];
        return;
    }
    else
    {
        //At this point, the modal animation will be completed and you can perform your segue if you want
    }  

}
于 2012-06-26T20:43:47.113 回答