让modalViewController出现的问题

时间:2011-02-18 05:08:43

标签: iphone objective-c ios uiviewcontroller modalviewcontroller

我已经和他斗争了好几个小时。我到处搜索,似乎无法找到问题的解决方案。我很确定我在这里缺少一些关键概念。

我的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)但我似乎无法让弹出的模态。

我应该如何完成我正在寻找的东西?什么是最佳实践,以及保持我的代码紧凑和整洁的最佳解决方案是什么?

我被困住了,所以希望你的解决方案能让我继续开发我的应用程序!

1 个答案:

答案 0 :(得分:1)

虽然问题不是那么简单,但解决办法是。您必须等到主视图出现。因此,请检查条件并使用viewDidAppear方法显示模态视图,而不是viewDidLoad方法。