【问题标题】:Cant use TabBar delegate methods不能使用 TabBar 委托方法
【发布时间】:2012-03-03 09:53:35
【问题描述】:

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

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

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

但它不起作用。为什么?

ViewDidLoad我写:

self.tabBarController.delegate = self;

我在 .h 中实现:

@interface BaseViewController : UITabBarController <UITabBarControllerDelegate>

【问题讨论】:

  • 你真的设置了标签栏控制器的代理吗?
  • 然后你设置你的类在你的.h中实现UITabBarControllerDelegate
  • 是的。我写
  • @MiQUEL 那是一年多以前的事了。我想,是的))

标签: ios xcode uitabbarcontroller tabbarcontroller


【解决方案1】:

在你的自定义 TabBarController 中,不要使用

self.tabBarController.delegate = self;

但是使用

self.delegate = self;

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

【讨论】:

    【解决方案2】:

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

    setSelectedIndex:
    setSelectedViewController:
    

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

    根据Apple's documentation

    选项卡上可能发生两种类型的用户启动更改 酒吧:

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

    两种类型 的更改会报告给标签栏控制器的委托,即 符合 UITabBarControllerDelegate 协议的对象。

    同时检查UITabBarControllerDelegate Protocol Reference

    在 iOS v3.0 及更高版本中,标签栏控制器调用此方法,无论 > 选择的视图控制器是否发生变化。此外,它仅在用户点击标签栏时调用,而不是在您的代码以编程方式更改标签栏内容时调用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 1970-01-01
      相关资源
      最近更新 更多