2012-10-01 73 views
0

我已經創建了一個具有登錄的應用程序。UINavigationController不推視圖控制器

它以歡迎視圖控制器開始,檢查用戶是否登錄,如果不是,則打開登錄視圖控制器。如果用戶已登錄,或者一旦他們將用戶推送到Home View Controller,就像這樣。

App Delegate (did finish launching) 

self.welcomeViewController = [[APPWelcomeViewController alloc] init]; 
self.homeViewController = [[APPHomeViewController alloc] initWithNibName:@"APPHomeViewController" bundle:nil]; 

self.navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController]; 
self.navController.navigationBarHidden = YES; 

self.window.rootViewController = self.navController; 

一旦用戶登錄,它將推送主視圖。

// Push the homeViewController onto the navController 
[self.navController pushViewController:self.homeViewController animated:YES]; 

這一切都正常工作到這一點。然後,我使用模式視圖控制器設置,其中包括註銷按鈕。用戶的註銷運行如下:

// Log the user out 
[User logOut]; 

// Then we need to remove the Settings Modal View Conrtoller 
[self.presentingViewController dismissModalViewControllerAnimated:YES]; 

// Then we need to take user back to welcomeViewController 
[self.navigationController pushViewController:welcomeViewController animated:YES]; 

它按預期取消設置視圖控制器,但導航控制器保持在主視圖上。沒有錯誤,有誰知道爲什麼這不能正常工作?

+0

刪除此行[self.navigationController pushViewController:welcomeViewController動畫:YES];並告訴我我們發生了什麼? – CRDave

回答

0

通過重新排列代碼解決。在appdelegate上搜索當前用戶,然後使用主視圖的根控制器加載導航控制器或運行加載歡迎視圖控制器的方法。

歡迎視圖控制器然後用戶檢查,以及,如果沒有當前用戶它呈現模態登錄視圖控制器

0

一旦你用包含歡迎視圖控制器的導航控制器初始化你的窗口,你就不需要推動導航控制器。

如果你想添加更多的視圖內部(歡迎視圖控制器內)你調用方法self.navigation控制器pushviewcontroller ...如果你想從堆棧中刪除,調用popviewcontroller ..你會去你的主視圖堆棧(根)。

+0

推送到導航控制器的每個視圖控制器是否保留在堆棧上,直到彈出它爲止?如果是這樣,我應該彈出主視圖控制器以返回到歡迎視圖,還是有方法將當前顯示的視圖控制器從現有堆棧列表中更改。下面的建議不起作用,它仍然在家裏。 – StuartM

0

試試這個:

// Take me back to the root navigation view controller (APPWelcomeViewController) 
[self.navigationController popToRootViewControllerAnimated:YES]; 
相關問題