2011-06-17 23 views
1

我在tabbar控制器中有2個選項卡欄,每個選項卡都帶有一個導航控制器。在一個給定的行動中,我想在一個執行一個命令,另一個執行一個命令。例如:目標C:在切換之前立即在tabbar中執行命令

// in my current tabbar, pop back to root view 
[self.navigationController popToRootViewControllerAnimated:YES]; 

// go to the first tab bar 
self.tabBarController.selectedViewController 
= [self.tabBarController.viewControllers objectAtIndex:0]; 

單獨執行時,上面的代碼可以正常工作。但是,按照上述順序進行佈局時,只執行第一個命令,而不執行第二個命令。

奇怪的是,當我切換序列,它的工作原理。

這裏發生了什麼事情導致這兩種不同的情況?

+0

請確保self.tabBarController不是零... – 2011-06-17 08:13:00

+0

它不是。一切正常。我想更好地理解的是爲什麼序列在這裏很重要 – 2011-06-17 08:39:21

+1

不確定你的層次結構,但也許第一個命令改變了視圖/控制器混亂,第二行無法工作。 – Eiko 2011-06-17 09:47:00

回答

2

只要你做,

[self.navigationController popToRootViewControllerAnimated:YES]; 

您分離從導航堆棧的視圖控制器。這會將navigationController屬性設置爲nil,因爲它不再屬於該堆棧。該屬性包含有效值是不合適的。

同樣的事情適用於tabBarController屬性。只要導航控制器是標籤欄控制器的一部分,或者它是該導航控制器的一部分,它就會被設置。這也設置爲nil以及該聲明的末尾。

切換語句將工作,因爲它不會改變導航堆棧,直到您的任務完成。

相關問題