UIViewController目前

时间:2013-06-05 20:34:24

标签: ios objective-c uiview 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!

这意味着什么,我哪里出错了?它不应该显示白色视图或我理解错误吗?

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

如果您从'viewDidLoad:'调用presentViewController:animated:completion,则无效。这就是原因:

  

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

View Controller Programming Guide for iOS: Presenting View Controllers from Other View Controllers

在呈现视图控制器的viewDidLoad框架中,尚未设置。这就是为什么只有在屏幕上显示控制器时才应该显示下一个控制器。