2012-04-13 50 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

是的,你當然可以這樣做的。

相關問題