我的主窗口中有一个UITabController,并希望在选择每个选项卡时添加一些逻辑。我已将委托添加到头文件中:
@interface MyAppAppDelegate : NSObject <UIApplicationDelegate, UITabBarDelegate> {
我有一个标签更改事件的方法:
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
//some code
}
但是没有调用didSelectItem方法中的代码。我已将UITabBarController的委托连接到IB中的AppDelegate。还有什么我需要做的吗?
答案 0 :(得分:2)
如果您通过IB分配代理,则应将TabBar的代理(而不是TabBarController)连接到您的应用代理。
确实,您不是在寻找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方法中。似乎工作正常。