UIViewController存在
我想展示一个UIViewController
与它的UIView
。
以下是我在viewDidLoad
方法中尝试的代码。
//create the view controller UIViewController *controller = [[UIViewController alloc] init]; UIView *view = [[UIView alloc] init]; view.backgroundColor = [UIColor whiteColor]; controller.view = view; //show the view [self presentViewController:controller animated:YES completion:nil];
当我运行该应用程序,它给我以下错误。
Warning: Attempt to present <UIViewController: 0x751fcd0> on <ViewController: 0x751d7a0> whose view is not in the window hierarchy!
这是什么意思,我哪里错了? 它不应该显示一个白色的看法,或我的理解错误?
谢谢。
解决scheme是将我的代码移动到viewDidAppear
方法。
我假设view controller's view
不是在它已被加载(当viewDidLoad
消息发送时)的窗口层次结构,但是它已经被呈现之后在窗口层次结构中(当viewDidAppear
:消息已发送)。
如果您从“viewDidLoad:”调用presentViewController:animated:completion
,则不起作用。 这就是为什么:
用于定义显示区域的屏幕区域由显示上下文决定。 默认情况下,表示上下文由根视图控制器提供,其框架用于定义表示上下文的框架。 然而,呈现视图控制器或视图控制器分层结构中的任何其他祖先可以select提供呈现上下文。 在这种情况下,当另一个视图控制器提供表示上下文时,则使用其框架来确定呈现的视图的框架。 这种灵活性使您可以将模式显示限制在屏幕的较小部分,使其他内容可见。
适用于iOS的View Controller编程指南:从其他视图控制器呈现视图控制器
在呈现视图控制器的viewDidLoad
框架还没有设置。 这就是为什么只有当显示控制器在屏幕上时才应该显示下一个控制器。