2012-03-03 46 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是你想要控制的控制器,所以不需要在其层次结构中搜索