AppDelegate中的UITabBarDelegate

时间:2011-08-02 12:40:40

标签: iphone ios xcode interface-builder uitabbarcontroller

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

@interface MyAppAppDelegate : NSObject <UIApplicationDelegate, UITabBarDelegate> {

我有一个标签更改事件的方法:

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

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

5 个答案:

答案 0 :(得分:2)

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

enter image description here

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

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

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

答案 1 :(得分:1)

如果您使用UITabbarController,则可以使用UITabBarControllerDelegate代替UITabBarDelegate

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

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

而不是:

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

答案 2 :(得分:0)

您是否指定了某个类作为标签栏的委托?像

这样的东西
myTabBar.delegate = self;

答案 3 :(得分:0)

我可能会出现在这里,但我认为方法的签名应该是:

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

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

答案 4 :(得分:0)

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