试图理解 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的主要内容,如果未能解决你的问题,请参考以下文章