如何在iPhone应用程序启动时打开不同的视图控制器?

时间:2011-12-02 00:09:16

标签: iphone objective-c ios uiviewcontroller

我有两个视图 - view1和view2。 View1是我从mainwindow.xib加载的默认viewcontroller。 根据某些条件检查,我想加载View1或View2,如果用户注册没有完成,请为用户加载注册屏幕,否则转到默认视图控制器。

我如何以及在何处检查此情况?

请帮忙。

提前致谢。

3 个答案:

答案 0 :(得分:3)

在您的app delegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {
     if(needToLogin) {
         [self setViewController:[[[ViewController2 alloc] initWithNib:@"Login View"] autorelease]];

     }

     [window setRootViewController:viewController];
}

如果needToLogin返回true,这会将视图控制器切换到view2视图控制器。否则,它将转到mainwindow.xib

中指定的默认控制器

另一种方法(因为你可能还需要主视图控制器)就是在需要时显示登录视图控制器。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {
     if(needToLogin) {
         ViewController2 *loginVC = [[[ViewController2 alloc] initWithNib:@"LoginViewController"] autorelease];

         [[self viewController] presentViewController:loginVC animated:NO];
     }

     [window setRootViewController:viewController];
}

注意,您必须致电[self dismissViewControllerAnimated:YES]以摆脱登录视图。

编辑:来自OP的回复:

我先尝试过,

if(loginflag){ 
     [self setViewController:[[[SignUpViewController alloc] initWithNibName:@"SignUpViewController" bundle:nil] autorelease]]; 
} 

[self.window setRootViewController:self.signUpView];

请改为尝试:

if(loginFlag) {
     [self setViewController:[[[SignUpViewController alloc] initWithNibName:@"SignUpViewController" bundle:nil] autorelease]];
}

[[self window] setRootViewController:[self viewController]];

答案 1 :(得分:1)

如果您只是计划在需要用户注册的情况下打开注册屏幕,为什么不坚持使用默认的视图控制器,但在-applicationDidBecomeActive:为注册视图提供模态视图控制器?

答案 2 :(得分:0)

根据给出的信息,您可以在AppDelegate中创建一个标志,该标志可以根据用户注册是否完成而持久化。然后在“didFinishLaunching ...”方法中,您可以检查此标志并根据此加载正确的视图。