试图了解TabBarDelegate

时间:2016-04-05 15:17:19

标签: objective-c delegates uitabbar

在我的一个ViewControllers中,我有以下代码:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController: (UIViewController*)viewController {
    NSLog(@"Yup!");
}

和:

UITabBarController *tabController = (UITabBarController*)self.window.rootViewController;
tabController.selectedIndex = 1;

每当我在多标签设置中切换标签时,控制台都会吐出

  

正如所料。

然而,当我添加

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

到我的AppDelegate.m&#39>

{{1}}
&#39> Yup'不再显示了。

怎么回事?

1 个答案:

答案 0 :(得分:0)

当您从应用程序本身选择/更改标签时,didSelectViewController将调用,当您以编程方式设置selectedIndex时,它将不会调用

tabController.selectedIndex = 1;,在您想要设置默认标签或想要以编程方式更改selectedIndex时非常有用

来自apple doc
     - (void)tabBarController:(UITabBarController *)tabBarController      didSelectViewController:(UIViewController *)viewController

  

仅在响应标签栏中的用户点击时调用它,而不是   当您的代码以编程方式更改标签栏内容时调用。

您可以尝试手动调用该方法:

- (void) selectedItemWithIndex:(int)value {
    tabbar.selectedIndex = value;
    [self tabBarController:tabbar didSelectViewController:tabbar.viewControllers.firstObject];//place you vc here by array or manually
}

参考:https://stackoverflow.com/a/30700712/4557505