2

我有1個主UIViewController包含UITabBarController。標籤欄控制器有4個UIViewControllers(每個由UINavigationControllers管理)。簡單地說,它看起來像這樣:管理NSNotification與UITabBarController交互

 
MainViewController 
    | 
    |--- FirstUIViewController 
    | 
    |--- SecondUIViewController 
    | 
    |--- ThirdUIViewController 
    | 
    |--- FourthUIViewController 

FirstUIViewController默認加載。

在SecondUIViewController中,有一個可能發生的事件。該事件具有與其一起傳遞的特定數據。發生此事件時,我想要發生兩件事:

1)FourthUIViewController在標籤欄控制器中被選中,以直觀顯示已輸入的不同標籤。

2)在FourthUIViewController中選擇特定UITableViewCell的後續操作。所選單元格由事件中傳遞的數據確定。

爲了做到這一點,我在MainViewController中創建了一個NSNotification觀察者。它從SecondUIViewController監聽事件,並通過userInfo從它獲取數據。

我也知道,從MainViewController我可以很容易地在UITabBarController上設置selectedIndex,以便顯示正確的選項卡。 (#1完成)。

然而,完成#2讓我感到困惑。我不知道如何(正確,正確地)設置選項卡欄的selectedIndex,然後使FourthUiViewController對所選單元格執行操作。我的假設是FourthUIViewController在事件發生之前可能沒有被加載,所以我不能設置任何參數或調用任何觀察者。

也許更廣泛的問題是,當通過選項卡選擇加載UIViewController時(與推送新的UIViewController非常簡單相比),數據如何傳遞。

TIA。

回答

0

如果需要,可以有許多收件人通知。爲什麼不讓你的其他視圖只聽同樣的通知,並根據UserInfo選擇所需的表格。

我明白嗎?

+0

我相信其他視圖控制器可能不會在事件被引發時被初始化(並且因此將無法聽到事件)。這是假設視圖控制器初始化,直到他們的選項卡被選中。 – pschang 2010-08-23 18:51:50

+0

在這種情況下,可以使用NSUserDefaults來傳遞此信息。您將UserData寫入NSUserDefaults,並在新的視圖首次加載時從該空間入手。一旦加載,它可以監聽通知中的數據。 – 2010-08-23 21:37:21

1

該視圖控制器將始終在啓動時加載,除非您對NIB文件做了一些非常奇怪的事情。

這有可能是控制器的觀點不會被加載,但你可以強制通過調用[fourthController view](或者,如果合適的話,[self view]),你操縱該視圖的表之前發生。