【问题标题】:tabBarController:shouldSelectViewController: not being called when delegate is settabBarController:shouldSelectViewController:设置委托时未调用
【发布时间】:2012-03-18 14:48:09
【问题描述】:

我想我已经在这里完成了我的功课。

我希望我的应用代理成为我的UITabBarController 的代理。

使用 IB,我已将 UITabBarController 的代表连接到我的应用程序代表。

App Delegate 头文件是:

@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

我尝试实现的委托方法是:

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController {
    NSLog(@"shouldSelectViewController called.");
    // do some stuff with viewController
    return YES;
}

我的应用程序委托有一个连接到 IB 的 UITabBarController 的出口。当我这样做时:

NSLog(@"tab bar controller delegate is %@", self.tabBarController.delegate);

我得到了一个很好的结果,例如tab bar controller delegate is &lt;MyAppDelegate: 0x6e86a30&gt;

我错过了什么?

【问题讨论】:

  • 我想说的一件事,标签栏控制器调用这个(shouldSelectViewController)方法来响应用户点击标签栏项目。只需单击任何标签栏项目以检查该方法。
  • 感谢您的提示。是的,这就是我正在做的。但是,该方法仍未被调用。
  • 我正在尝试你的代码,因为你给它的代码对我有用
  • @galacticfury 在窗口中检查您的代理连接。
  • 我在 IB 中的代理连接似乎是正确的。我真的很困惑,因为据我所知,我的设置与示例 Apple 项目 Tabster 相同。 Tabster 还使用 UITabBarController 委托方法,并且正在调用它。但我的不是。 :-(

标签: iphone ios cocoa-touch delegates uitabbarcontroller


【解决方案1】:

只需编写此代码。一般在viewDidLoad()

self.tabBarController.delegate = self;

如果当前控制器是UITabBarController 那么:

self.delegate = self

【讨论】:

    【解决方案2】:

    好的,找到了解决方案。我的RootViewController 中有一些旧代码将此控制器设置为委托。 RootViewController 上没有实现任何委托方法,因此看起来好像什么也没发生。因为RootViewControllerMyAppDelegate 之后被设置为委托,所以委托实际上被设置为RootViewController

    因此,本课是仔细检查您的代码,以确保没有将其他对象也设置为委托。

    【讨论】:

    • 哇!同样在这里。我仍然无法相信这是我的问题...谢谢!
    • 我不明白答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 2013-03-29
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多