presentViewController不呈现视图,但是调用了viewDidLoad(...)

时间:2014-05-29 01:44:23

标签: ios user-interface

我一直在寻找有类似问题的其他用户,但这些建议似乎都不起作用。我的问题是我正在开发一个iPad应用程序,在工作流程的某一点上,用户可以生成一个模态对话框。但是,对话框从不显示(屏幕变暗表示发生了某些事情)。

我像这样生成对话框:

ASecondaryImplantChooserDialog* secondaryImplantChooserDialog = [self.storyboard instantiateViewControllerWithIdentifier:@"ASecondaryImplantChooserDialog"];

[secondaryImplantChooserDialog setModalPresentationStyle:UIModalPresentationFormSheet];
[secondaryImplantChooserDialog setDefinesPresentationContext:YES];

[self presentViewController:secondaryImplantChooserDialog animated:YES completion:nil];

我应该注意,类名和故事板标识符在设计上是相同的。

secondaryImplantChooserDialog的viewDidLoad(...)方法会被调用,但其他方法不会被调用(例如viewWillLayoutSubviews)。我使用相同类型的代码在应用程序的其他部分中生成其他对话框,这使我认为故事中有关控制器配置的故事,但是,我已经从生成的对话框的配置中复制该配置,无效。有什么想法吗?

更新:
感谢Yuandra Ismiraldi的建议,我能够诊断出视图层次结构。我确实在打印输出中看到了相关的视图。在预感中,我从故事板中删除了视图,并创建了一个新视图。这解决了这个问题。

2 个答案:

答案 0 :(得分:1)

如果调用viewDidLoad,则加载视图。那么问题是视图控制器的状态究竟是什么(它是隐藏的还是屏幕外的)。我建议您首先尝试按照此线程How do I inspect the view hierarchy in iOS?

中的描述检查视图控制器层次结构

答案 1 :(得分:1)

您还可以在viewDidLoad中显示视图控制器,该控制器无效。 viewDidAppear确实有效,尽管您需要注意不要多次出现,因为它被频繁调用。