2012-04-13 54 views
2

有没有任何方法有条件地从App Delegate加载视图控制器?iOS:有条件加载视图控制器

因此,例如,这可以做到吗?

if (hasUserSignedUp) { 
     nav = [[navController alloc] initWithNibName:nil bundle:nil]; 
     [window addSubview:nav.view]; 
     [window makeKeyAndVisible]; 
    } 
    else { 
     su = [[SignUpViewController alloc] initWithNibName:nil bundle:nil]; 
     [window addSubview:su.view]; 
     [window makeKeyAndVisible]; 
    } 
+1

我不认为这应该被拒绝;虽然这个问题本质上也是技术性的,但它也是一个哲学问题,它削减了'applicationDidFinishLaunching:'方法负责的核心问题。 – 2012-04-13 23:42:33

+0

我确实尝试过。否则,我不需要发布问题。如果你没有什么有用的话,那么不要说“不要说了吧!真的很常见, – rosst400 2012-04-13 23:57:49

+2

我会同意@ edc1591这篇文章,如果你的意思不是”会编译和运行“那么你需要这样说,我们不能猜测没有提到的问题 – mydogisbox 2012-04-14 00:09:49

回答

1

是的,这是相当方便的,没有限制你这样做。

但是你最好设置rootViewController而不是添加一个视图,我想。

self.window.rootViewController = nav;//or su; 
1

虽然这当然是可能的,什么可能是一个更好的主意是在两种情况下加载您的导航控制器,并根据他们是否已经注册了,使用不同的根视图控制器。

if (hasUserSignedUp) { 
    nav = [[UINavigationController alloc] initWithRootViewController:rootViewController]; 
} 
else { 
    su = [[SignUpViewController alloc] initWithNibName:nil bundle:nil]; 
    nav = [[UINavigationController alloc] initWithRootViewController:su]; 
} 

[window addSubview:nav.view]; 
[window makeKeyAndVisible]; 

应用程序删除应该创建视图层次结构的根,并从那里,你可以按照你认为合适的方式操纵它。

如果我是你,我会用上面的代码,一旦他们已签署或签署,推动定期根视图控制器,然后修改导航栈栈:

[self.navigationController pushViewController:rootViewController animated:YES]; 

double delayInSeconds = 0.5f; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
    self.navigationController.viewControllers = [NSArray arrayWithObject:self.navigationController.viewControllers.lastObject]; 
}); 

这ISN”最简洁的方式来做到这一点(dispatch_after),但你看看它是如何完成的。确保rootViewController的hidesBackButton设置为YES

0

是的,你当然可以这样做的。

相关问题