试图理解 TabBarDelegate

Posted

技术标签:

【中文标题】试图理解 TabBarDelegate【英文标题】:Trying to understand TabBarDelegate 【发布时间】:2016-04-05 15:17:19 【问题描述】:

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

- (void)viewDidLoad

    UITabBarController *tabBarController = (UITabBarController*)[UIApplication sharedApplication].keyWindow.rootViewController ;
    [tabBarController setDelegate:self];

和:

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

每当我在多选项卡设置中切换选项卡时,控制台都会弹出

是的

正如预期的那样。

但是,当我添加

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

到我的 AppDelegate.m 的

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

“是”不再显示。

怎么会?

【问题讨论】:

【参考方案1】:

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://***.com/a/30700712/4557505

【讨论】:

这是有道理的,但我希望当我更改标签时“是的”仍然会启动 我仍然看不到 AppDelegate 中的方法会取消其他功能的原因。而且我太老了,不能做 Swift。 它在哪里取消了它没有像我从苹果文档中引用的那样实现的功能,你只是在设置一个属性

以上是关于试图理解 TabBarDelegate的主要内容,如果未能解决你的问题,请参考以下文章

试图理解C中的递归

递归 - 试图理解

试图理解 TabBarDelegate

试图理解 TranslationInView

试图理解 ML 上的示例脚本

试图理解删除实体框架中的子实体