我想以编程的方式在一个UIViewController中设置一个NavigationController,但是loadView或viewDidLoad方法会被调用。
这是我在应用程序委托中的代码:
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。我遗漏了什么?我以为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];编辑乔纳的评论,但loadView仍然没有被打电话。
发布于 2011-09-11 20:33:33
当控制器的UIViewController getter被调用并且其视图当前为nil时,-loadView将创建它的视图(通过从nib加载它或实现它)。
在显示的代码中,您永远不会调用视图属性的getter,只调用它的setter。
另外,您正在从应用程序委托分配控制器的视图。UIViewController需要根据需要创建自己的视图,而不是由其他类提供。当您意识到控制器卸载其视图并尝试重新创建它以响应内存警告时,此方法将在稍后引起您的问题。让您的控制器创建它的视图,不要试图传递它。
发布于 2011-10-26 09:07:31
也许你没有面对这个问题..。但前几天我遇到了同样的麻烦..。loadView,viewDidLoad和viewWillAppear没有在我的UIViewController中被调用。
我的问题很简单,但如果你不小心的话,要抓住有点棘手。而不是写作
-(void) loadView我写道:
-(void) loadview请注意,这不会引发任何警告。loadView中"V“和"v”的区别很容易被忽略。显然,由于loadView没有被调用,viewDidLoad/viewWillAppear也不会被调用,因为没有加载视图(我没有以编程方式使用任何nib..creating视图)。
-Anshu
发布于 2013-06-11 14:12:47
另一个值得注意的问题是,如果您定义
@synthesize view;如果您的实现中没有匹配的@属性,这可能导致对视图控制器返回的零的调用,而不会调用您的loadView方法。
https://stackoverflow.com/questions/7380754
复制相似问题