0

我正在尝试在其上展示UIViewControllera 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!

这是什么意思,我哪里错了?它不应该显示白色视图还是我理解错误?

谢谢。

4

2 回答 2

2

解决方案是将我的代码移动到viewDidAppear方法中。

我假设view controller's view它在加载时不在窗口层次结构中(viewDidLoad发送消息时),但在呈现后它在窗口层次结构中(viewDidAppear发送 : 消息时)。

于 2013-06-05T20:37:12.237 回答
1

如果您presentViewController:animated:completion从 'viewDidLoad:' 调用,它将不起作用。这就是为什么:

用于定义演示区域的屏幕区域由演示上下文确定。默认情况下,表示上下文由根视图控制器提供,其框架用于定义表示上下文的框架。但是,呈现视图控制器或视图控制器层次结构中的任何其他祖先可以选择提供呈现上下文。在这种情况下,当另一个视图控制器提供呈现上下文时,它的框架将用于确定呈现视图的框架。这种灵活性允许您将模态演示限制在屏幕的较小部分,使其他内容可见。

iOS 视图控制器编程指南:从其他视图控制器呈现视图控制器

viewDidLoad呈现视图控制器的框架中根本没有设置。这就是为什么您应该仅在呈现控制器在屏幕上时呈现下一个控制器。

于 2013-06-06T05:29:34.720 回答