您是否試圖在applicationDidFinishLaunching中顯示LoginViewcontroller:?那時,根視圖控制器還沒有出現,所以它還不在窗口層次結構中。有三件事你可以做。其中,使其出現在applicationDidBecomeActive:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *controller = [storyboard instantiateViewControllerWithIdentifier:@"navigationForLog"];
[self.window.rootViewController presentViewController:controller animated:YES completion:nil];
}
或者,你可以把它從使用TabBar控制器的viewDidAppear出現。這假定你有一個自定義標籤欄控制器。
在MyCustomTabBarController.m:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UIStoryboard *storyboard=[UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *controller = [storyboard instantiateViewControllerWithIdentifier:@"navigationForLog"];
[self presentViewController:controller animated:YES completion:nil];
}
這些解決方案將首先顯示根視圖控制器的兩個,然後模態推日誌的ViewController。如果您希望它立即顯示,請將動畫:YES更改爲動畫:NO。
另一種可以做到這一點的方法是讓你的登錄是一個根視圖控制器。如果用戶尚未登錄,則不應該有一個TabBar控制器,因爲它可能會嘗試加載不可用的內容。如果是這樣的話,你應該從故事板中的一個登錄控制器開始。如果登錄成功,您可以將tabbar放在登錄名的頂部(而不是在tabbar頂部登錄),或者您可以將rootviewcontroller替換爲登錄控制器。
編輯1:
當呈現在另一個的頂部上的模態視圖控制器,爲了使新的控制器有一個導航控制器,你必須與它一起呈現導航控制器。這是你應該有的故事板。第一個視圖是你的標籤控制器。當您確定用戶需要登錄時,預設其rootViewController是您的loginController的UINavigationController。
編輯2:
我調整我的故事板,以便登錄控制器沒有得到通過導航欄覆蓋。您必須在右側窗格中取消設置擴展邊緣:在頂部條塊下。另外,您可以直接在故事板中的導航欄上添加後退/關閉按鈕。
編輯3:
注意,控制器應該出現在applicationDidBecomeActive:是導航控制器。我顯示的示例登錄控制器什麼都不做,並且您應該爲按鈕添加其他功能等。當您實例化並顯示導航控制器時,它將顯示它擁有的任何rootViewController(在本例中爲您的登錄控制器)以及導航酒吧。
第一解決方案工作但它不顯示我的導航欄控制器 – m34 2014-09-05 13:14:01
啊,原因是導航控制器屬於登錄控制器,登錄完成後,有一個在新的堆棧中沒有導航控制器。 – mitrenegade 2014-09-05 13:14:45
對不起,我真的不明白你在說什麼@mintrenegade對不起 – m34 2014-09-05 13:19:30