我的自定义TabBar控制器类有一个应用程序。
我尝试实现tabbar控制器委托方法:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"%i",tabBarController.selectedIndex);
}
但它不起作用。为什么呢?
在ViewDidLoad
我写道:
self.tabBarController.delegate = self;
在.h我实施:
@interface BaseViewController : UITabBarController <UITabBarControllerDelegate>
答案 0 :(得分:3)
在自定义TabBarController中,请勿使用
self.tabBarController.delegate = self;
但请使用
self.delegate = self;
.tabBarController返回视图控制器层次结构中最近的祖先,它是一个标签栏控制器,但您的自定义TabBarController是您要定位的控制器,因此无需在其层次结构中进行搜索
答案 1 :(得分:1)
你说过,这是你的自定义TabBarController。你做的定制是什么?如果您更改了TabBar面板并将其替换为您自己的使用
setSelectedIndex:
setSelectedViewController:
手动方法,那么你也应该手动调用委托的方法。
选项卡上可以发生两种类型的用户启动的更改 条:
- 用户可以选择标签。
- 用户可以重新排列标签。
两种类型 将更改报告给选项卡栏控制器的委托,即 一个符合UITabBarControllerDelegate协议的对象。
同时检查UITabBarControllerDelegate Protocol Reference
在iOS v3.0及更高版本中,无论&gt;是否,标签栏控制器都会调用此方法。所选视图控制器已更改另外,仅响应于&gt;中的用户点击而调用它。当代码以编程方式更改标签栏内容时,不会调用标签栏。
仅当用户与其UITabBar控件进行交互时,代理才会响应。