iphone - 未调用 UIViewController 的 loadView

标签 iphone ios uiview uiviewcontroller

我想以编程方式在 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

之后会调用 loadView

编辑

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 (通过从 ni​​b 加载它或实现 -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/

相关文章:

iphone - viewDidAppear : not firing under certain conditions?

iphone - 从我自己的图像创建 "map"

objective-c - 未使用的属性访问结果

ios - iCloudKit,将两种方法链接到第三种

iPhone 4S - 它会有 UDID 吗?

iPhone iOS 大型 UIView 在显示时被裁剪为 320x460。如何预防?

ios - 单击 AdBannerView 时应用程序崩溃

iphone - iPhone Objective C-铃声音量和应用内音量之间的差异

ios - 以非编程方式使用 (UIView) 类 - Swift

ios - viewDidAppear,还有当应用程序从后台返回时