2012-03-03 64 views
2

我得到了一個應用程序與我的自定義TabBar控制器類。不能使用TabBar委託方法

我試圖執行的TabBar控制器的委託方法:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    NSLog(@"%i",tabBarController.selectedIndex); 
} 

但它不工作。爲什麼?

ViewDidLoad

我寫:

self.tabBarController.delegate = self; 

而且在.H我實現:

@interface BaseViewController : UITabBarController <UITabBarControllerDelegate> 
+0

你真的設置了標籤欄控制器的代表嗎? – yuji 2012-03-03 10:03:23

+0

是的。我做了它viewdidload – 2012-03-03 10:06:58

+0

你設置你的類來實現'UITabBarControllerDelegate'在你的.h? – yuji 2012-03-03 10:09:50

回答

1

你說,這是你的自定義TabBarController。你做了什麼定製?如果你改變了的TabBar面板,並用自己取代它手動使用

setSelectedIndex: 
setSelectedViewController: 

方法,那麼你應該調用代理的方法手動過。

按照Apple's documentation

有兩種類型的可選項卡 欄上會出現用戶發起的更改:

  • 用戶可以選擇一個標籤。
  • 用戶可以重新排列選項卡。

變化的這兩種類型的 被報告給標籤欄控制器的代表,其是 一個符合UITabBarControllerDelegate協議的對象。

同時檢查UITabBarControllerDelegate Protocol Reference

在iOS系統v3.0與以後,標籤欄控制器不管>所選視圖控制器是否改變調用此方法。另外,它僅在響應用戶點擊>標籤欄時被調用,並且在代碼以編程方式更改標籤欄內容時不會被調用。

代表會迴應只有用戶其UITabBar控制交互。

3

在您的自定義TabBarController,不要使用

self.tabBarController.delegate = self; 

但使用

self.delegate = self; 

.tabBarController返回最近的祖先在視圖控制器層次結構是一個標籤欄控制器,但您的自定義TabBarController是你想要控制的控制器,所以不需要在其層次結構中搜索