故事板 Segue 未加载视图

Posted

技术标签:

【中文标题】故事板 Segue 未加载视图【英文标题】:Storyboard Segue not loading view 【发布时间】:2012-06-26 20:33:19 【问题描述】:

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

查看控制器可能路径:

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

选择转场的代码:

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

问候 安德烈亚斯

【问题讨论】:

segue 的配置是做什么的?如果配置为“推送”,源视图控制器是否嵌入在导航控制器中? 两个 Segue 都设置为 Modal。 segues 是否以其他方式配置?另外,第四个日志输出行是什么?它不包含在您包含的prepareForSegue:sender: 的代码 sn-p 中。 如果将日志语句放在SplashAfterStopViewControllerinitWithCoder:awakeFromNibviewDidLoad:viewWillAppear: 方法中会发生什么? David:第四行日志在 prepareForSegue 中:if ([[segue identifier] isEqualToString:@"sgueStopSplash"]) NSLog(@"sgueStopSplash"); 【参考方案1】:

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

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

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

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


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


编辑:更新答案

在执行 segue 之前等待 [selfdismissModalViewController: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
      


【讨论】:

这可能发生在某些动作中,例如按钮点击、手势或设备晃动。那会更合理。 (但仍然只是猜测) 动画可能正在发生,因为我有一个 [self dismissModalViewControllerAnimated:YES];,确认!更改为 NO 解决了问题。有什么方法可以等待动画完成? 更新了我的答案,包括如何在执行 segue 之前等待模态动画。

以上是关于故事板 Segue 未加载视图的主要内容,如果未能解决你的问题,请参考以下文章

故事板加载时首先调用啥方法?

使用自定义表格视图单元格中的故事板segue

使用 Parse.com 的多个 Segue 故事板和 TableViewCell

iOS - 我的 iPad 故事板上的详细视图未填充

UIViewController _loadViewFromNibNamed:bundle 加载了“XXXViewController”笔尖,但未设置视图出口。 -*使用故事板*

关闭 pdf 文件后故事板 segue 错误