无法使用Tab Bar委托方法

时间:2012-03-03 09:53:35

标签: ios xcode uitabbarcontroller tabbarcontroller

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

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

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

但它不起作用。为什么呢?

ViewDidLoad我写道:

self.tabBarController.delegate = self;

在.h我实施:

@interface BaseViewController : UITabBarController <UITabBarControllerDelegate>

2 个答案:

答案 0 :(得分:3)

在自定义TabBarController中,请勿使用

self.tabBarController.delegate = self;

但请使用

self.delegate = self;

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

答案 1 :(得分:1)

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

setSelectedIndex:
setSelectedViewController:
手动

方法,那么你也应该手动调用委托的方法。

根据Apple's documentation

  

选项卡上可以发生两种类型的用户启动的更改   条:

     
      
  • 用户可以选择标签。
  •   
  • 用户可以重新排列标签。
  •   
     

两种类型   将更改报告给选项卡栏控制器的委托,即   一个符合UITabBarControllerDelegate协议的对象。

同时检查UITabBarControllerDelegate Protocol Reference

  

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

仅当用户与其UITabBar控件进行交互时,代理才会响应。