2012-02-23 51 views
0

我有一個標籤欄MainViewController帶有一些標籤欄按鈕,第一個是View 1這是一個導航控制器,堆疊最多3或4個孩子。最終的標籤欄按鈕是SettingsViewController,其中有一個類似於「註銷」的功能,該功能調用AppDelegate上的一個方法,該方法將刪除MainViewController並將用戶發送回登錄頁面。在標籤欄中彈出一個導航控制器

當按下SettingsViewController註銷按鈕我希望AppDelegate中設置所選標籤爲View 1(我做了),向用戶發送到登錄視圖(也做),但也popToRootViewController上View 1這是我正在努力的一點。

我試着用tabBar上的viewControllers屬性來獲取對索引0處的視圖控制器的引用,但是這看起來不是正確的方式,除非我正確實現它。

我最近嘗試:

// Fine 
mainViewcontroller.tabBarController.selectedIndex = 0; 

// Not so fine 
NSArray *allViewControllers = [mainViewcontroller.tabBarController viewControllers]; 
View1 *vc = [allViewControllers objectAtIndex:0]; 
[vc.navigationController popToRootViewControllerAnimated:NO]; 

在通過所有視圖控制器中的標籤只是迭代和彈出到同樣似乎並沒有工作,根本的另一種嘗試:

for (UIViewController *viewController in mainViewcontroller.tabBarController.viewControllers) 
{ 
    [viewController.navigationController popToRootViewControllerAnimated:NO]; 
} 

燦有人幫忙嗎?

+0

你有一個UINavigationController在視圖1嗎? – bontoJR 2012-02-23 10:19:31

+0

我這樣做,是的,這是推視圖1中的附加視圖控制器。在註銷時,我想讓該導航控制器彈出回到開頭。 – Greg 2012-02-23 10:22:47

+0

你究竟如何執行它?你有沒有嘗試過把viewController轉換成你的特定視圖控制器類? – 2012-02-23 10:54:36

回答

0

只是爲了關閉緣故...使用完全相同的代碼粘貼在我的問題工作找到時,我重新編程標籤欄控制器而不是在IB。

0

您是否認爲您試圖從中彈出的視圖控制器可能不存在,因爲它可能已從內存中清除(暫時)?如果內存不足,系統會從內存中刪除視圖中不可見的控制器。

爲了克服這個問題,我會在設置selectedIndex時暫停當前的方法。不過,我以前會設置一個標誌來聲明應用程序應該彈回到根目錄,即Bool shouldPopBackToRoot = true;

然後viewDidAppear的viewControllers檢查這個標誌,看看他們是否應該popBackToRoot,如果是的話,從viewController的viewDidAppear(並且不要忘記將shouldPopBackToRoot重置爲false)popToRootViewController。

相關問題