【问题标题】:Tabbar delegate is not getting called标签栏委托没有被调用
【发布时间】:2012-11-23 06:27:46
【问题描述】:

我试图在每次按下标签栏按钮时捕获事件,并在AppDelegate.h 中将以下函数添加到AppDelegate.m 文件中的UITabBarControllerDelegate,但它没有被调用。我还将 tabBarController 代表连接到 IB 中的 First Responder

这里有人可以帮我解决这个问题吗?

// AppDelegate.h

@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>

// AppDelegate.m

    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{

   NSLog(@"Touched Tab\n");

}

【问题讨论】:

  • 不要将第一响应者与委托人绑定

标签: iphone xcode4.2


【解决方案1】:

如果我正确理解您的图形,您的“代表”不应该是“第一响应者”(谁知道设置为什么;它可能是视图控制器,也可能是键盘,或者基本上是设置的任何对象成为第一响应者......)。

相反,您需要将委托设置为您编写的委托方法实际存在的对象或类(您的视图控制器?)。看起来应该将委托设置为您的“AppDelegate”对象。

【讨论】:

    【解决方案2】:

    请将您的委托与 AppDelegate 而非 FirstResponder 绑定。

    【讨论】:

    • 他正在使用故事板。 App Delegate 占位符在情节提要中不可用。
    • 就像 rob mayoff:提到我正在使用故事板。我确实使用 IB 将一个对象拖放到选项卡栏控制器视图,然后将 IB 中的自定义类映射到 AppDelegate,但是现在当我按下第二个选项卡时,应用程序崩溃了......
    【解决方案3】:

    只需要在下面的函数中添加两行代码就可以让委托工作。希望它可以为某人节省时间和挫败感。

    // AppDelegate.m

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    

    {

      self.m_pTabBarController = (UITabBarController *)self.window.rootViewController;
      self.m_pTabBarController.delegate = self;
      return YES;                            
    

    }

    // AppDelegate.h

    @interface ftAppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>{
    IBOutlet UITabBarController *m_pTabBarController;
    

    }

    @property (strong, nonatomic) UIWindow *window;

    @property(非原子,保留)IBOutlet UITabBarController *m_pTabBarController;

    @结束

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多