不能使用TabBar委托方法

我有自定义TabBar控制器类的应用程序。

我试图实现tabbar控制器委托方法:

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

但它不起作用。 为什么?

ViewDidLoad我写道:

 self.tabBarController.delegate = self; 

并在.hi实现:

 @interface BaseViewController : UITabBarController  

在自定义TabBarController中,请勿使用

 self.tabBarController.delegate = self; 

但是用

 self.delegate = self; 

.tabBarController返回视图控制器层次结构中最近的祖先,它是一个标签栏控制器,但您的自定义TabBarController是您要定位的控制器,因此无需在其层次结构中进行搜索

你说过,这是你的自定义TabBarController。 你做的定制是什么? 如果您更改了TabBar面板并将其替换为您自己使用的面板

 setSelectedIndex: setSelectedViewController: 

手动方法,然后你也应该手动调用委托的方法。

根据Apple的文档 :

标签栏上可以发生两种类型的用户启动的更改:

  • 用户可以选择选项卡。
  • 用户可以重新排列选项卡。

两种类型的更改都会报告给选项卡栏控制器的委托,该委托是符合UITabBarControllerDelegate协议的对象。

另请检查UITabBarControllerDelegate协议参考

在iOS v3.0及更高版本中,无论>所选视图控制器是否更改,选项卡栏控制器都会调用此方法。 此外,仅在响应用户点击标签栏时调用它,并且当您的代码以编程方式更改标签栏内容时不会调用它。

仅当用户与其UITabBar控件交互时,Delegate才会响应。