5

我正在開發一個項目在Objective-C爲iOS,我有一個視圖與多個選項卡使用UITabBarController的子類。每個選項卡都有它自己的UINavigationController。當視圖在選項卡上加載時,相應的激活事件會觸發(viewWillAppear,viewDidLoad等)。但是,一旦你點擊不同的標籤,然後點擊,並不是所有的這些事件都會再次觸發,因爲視圖已經是特定標籤的可見視圖(例如viewDidLoad)。NSNotification或委託註冊時,可見視圖更改

我的問題是:是否有一個通知或委託,我可以簡單地註冊並獲得通知時,窗口中的可見視圖更改?我做了一些研究,但沒有找到任何具體的內容。我打算做的是:

  1. 檢查可見視圖時,標籤欄指標的變化:tabBarController:didSelectViewController
  2. 註冊爲每個導航控制器上此事件:navigationController:didShowViewController:動畫:

通過這樣做,每當visibleViewController發生變化時,通過更改選項卡或在選項卡的導航流中導航(除了模式,在這種情況下,我不關心它們,它們已被處理),我應該得到通知。

這是正確的做法嗎?

回答

1

你看過UITabBarControllerDelegate嗎?這個方法聽起來你在找什麼:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

從文檔:

In iOS v3.0 and later, the tab bar controller calls this method regardless 
of whether the selected view controller changed. In addition, it is called only 
in response to user taps in the tab bar and is not called when your code 
changes the tab bar contents programmatically. 

這裏的鏈接:http://developer.apple.com/library/ios/#documentation/uikit/reference/UITabBarControllerDelegate_Protocol/Reference/Reference.html

希望幫助!

0

首先實現UITabBarController委託方法「tabBarController:didSelectViewController」並在應用程序委託中註冊它。您無法在每個導航控制器中註冊。只有一個對象可以是委託。在該方法中,將它轉換爲UINavigationController。

然後通過在該UINavigationController上調用「topViewController」來獲取UIViewController。然後直接調用viewWillAppear:方法。

+0

謝謝。我會盡快給出這一點 - 我還有其他一些缺陷可以走出門外。 :) –