【问题标题】:UITabBarDelegate in AppDelegateAppDelegate 中的 UITabBarDelegate
【发布时间】:2011-10-18 05:45:30
【问题描述】:

我的主窗口中有一个 UITabController,并且希望在选择每个选项卡时添加一些逻辑。我已将委托添加到头文件中:

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate, UITabBarDelegate> {

我有一个选项卡更改事件的方法:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
    //some code
}

但是没有调用 didSelectItem 方法中的代码。我已将 UITabBarController 的委托连接到我在 IB 中的 AppDelegate。我还有什么需要做的吗?

【问题讨论】:

  • didSelectItem 是您需要的方法。你能展示你如何设置标签栏的代表吗?

标签: iphone ios xcode interface-builder uitabbarcontroller


【解决方案1】:

如果您使用UITabbarController,您可以使用UITabBarControllerDelegate 而不是UITabBarDelegate

然后,您可以设置self.delegate = self。然后你使用:

 (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;

代替:

 (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item;

【讨论】:

    【解决方案2】:

    我最终将它放在我需要的特定选项卡中视图的 viewWillAppear 方法中。似乎工作正常。

    【讨论】:

      【解决方案3】:

      如果您通过 IB 分配委托,您应该将 TabBar(而不是 TabBarController)的委托连接到您的应用委托。

      确实,您不是在寻找UITabBarControllerDelegate,而是在寻找UITabBarDelegate

      如果您以编程方式执行此操作,则从您的标签栏控制器viewDidLoad 执行:

      self.tabBar.delegate = [UIApplication sharedApplication].delegate;
      

      【讨论】:

      • 好主意,不幸的是,它随后崩溃并出现错误:*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Changing the delegate of a tab bar managed by a tab bar controller is not allowed.'
      • 我明白了...在这种情况下,我怀疑您使用didSelectItem 的唯一机会是直接使用UITabBar 而没有UITabBarController。或者,尝试继承 UITabBarController 并且 only 覆盖 didSelectItem(我猜控制器是标签栏的代表;不确定它是否会起作用,但您可以尝试)。
      【解决方案4】:

      我可能在这里处于困境,但我认为该方法的签名应该是:

      - (IBAction)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
      

      然后将其连接到 IB 中的标签栏。更改为 IBAction 后,它应该出现在 IB 中

      【讨论】:

        【解决方案5】:

        您是否指定了某个类作为标签栏的代表?类似的东西

        myTabBar.delegate = self;
        

        【讨论】:

        • 好建议,但没有效果。它与作为 AppDelegate 本身的委托有关吗?是否有一些规则说如果它是 AppDelegate,它就不能是任何其他类型的委托?
        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多