我已经和他斗争了好几个小时。我到处搜索,似乎无法找到问题的解决方案。我很确定我在这里缺少一些关键概念。
我的AppDelegate(didFinishLaunching)基本上设置了我的窗口并调用了RootViewController:
// create our window UIWindow *window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [window setBackgroundColor:[UIColor blackColor]]; // create our rootviewcontroller RootViewController *controller = [[RootViewController alloc] init]; // add our rootviewcontroller's view to our window [window addSubview:controller.view]; // controller is now owned by window's view [controller release]; // show us to the world [window makeKeyAndVisible];
当我将controller.view添加为窗口的子视图时,我的理解是RootVC的loadView将自动被调用。
在RootVC loadView中,我创建了一个tabBarController,每个选项卡都有一个navigationController和它自己的viewController。一切正常。
在RootVC viewDidLoad中,我正在检查这是否是用户第一次运行此应用程序,如果是,我想抛出一个模态欢迎屏幕。这是我遇到麻烦的部分。
我想从RootVC的viewDidLoad方法中保留尽可能多的代码,理想情况下我可以用这个来完成我想要的:
WelcomeViewController *welcome = [[WelcomeViewController alloc] init]; [self presentModalViewController:welcome animated:true]; [welcome release];
显然这不起作用。 WelcomeVC的loadView尚未运行,因为我没有明确设置它的view属性。我玩了很多不同的解决方案(welcome.view - [[UIView ....],使用WelcomeVC的init方法来设置self.view)但我似乎无法让弹出的模态。
我应该如何完成我正在寻找的东西?什么是最佳实践,以及保持我的代码紧凑和整洁的最佳解决方案是什么?
我被困住了,所以希望你的解决方案能让我继续开发我的应用程序!
答案 0 :(得分:1)
虽然问题不是那么简单,但解决办法是。您必须等到主视图出现。因此,请检查条件并使用viewDidAppear
方法显示模态视图,而不是viewDidLoad
方法。