我想以编程方式在 NavigationController 中设置 UIViewController,但是调用了 loadView 和 viewDidLoad 方法。
这是我在应用委托(delegate)中的代码:
MyViewController *viewController = [[MyViewController alloc] init];
UIView *view = [[UIView alloc] initWithFrame:window.frame];
viewController.view = view;
UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:[navController view];
[window makeKeyAndVisible];
当我启动应用程序时,我看到一个导航栏,但没有调用 loadView。我错过了什么?
我以为在调用 view
编辑
MyViewController *viewController = [[MyViewController alloc] init];
[viewController view]; // doesn't look right?
UINavgationController *navController = [[UINavigationController alloc] initWithRootViewController:viewController];
[window addSubview:[navController view];
[window makeKeyAndVisible];
针对 Jonah 的评论进行了编辑,但 loadView 仍然没有被调用。
最佳答案
UIViewController
将在调用 Controller 的 view
getter 时创建其 View (通过从 nib 加载它或实现 -loadView
),并且它的 View 当前是 nil
。
在显示的代码中,您从不调用 View 属性的 getter,只调用它的 setter。
此外,您正在从您的应用程序委托(delegate)中分配 Controller 的 View 。 UIViewController
应该根据需要创建自己的 View ,而不是让其他类提供它们。当您意识到 Controller 卸载其 View 并尝试重新创建它以响应内存警告时,此方法将在以后给您带来问题。让你的 Controller 创建它的 View ,不要试图传递给它。
关于iphone - 未调用 UIViewController 的 loadView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7380754/