在启动时以编程方式为 5 个选项卡栏项目设置选项卡栏标题,其中 4 个嵌入在导航控制器中,1 个没有。目标 C
Posted
技术标签:
【中文标题】在启动时以编程方式为 5 个选项卡栏项目设置选项卡栏标题,其中 4 个嵌入在导航控制器中,1 个没有。目标 C【英文标题】:Set Tab Bar title programatically at Startup for 5 Tab Bar item, 4 of which is embedded in Navigation Controller, 1 is not. Objective C 【发布时间】:2018-04-30 07:43:17 【问题描述】:如何在启动或AppDelegates
设置标签栏标题。我有 5 个Tab Bar Item
,其中 4 个嵌入在 Navigation Controller
中,1 个没有,只是一个 tab bar item
。请看下图
更新了VC调用方法
#import "AppDelegate.h"
@interface ProfileChgLang ()
AppDelegate *appDelegate;
NSString *sLanguage;
- (IBAction)btnChinese:(id)sender
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"CN" forKey:@"txtLanguage"];
[(AppDelegate*)[UIApplication sharedApplication].delegate setupTabBar];
//UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
//==== Is the following correct? =====
UITabBarController * tabBarController = (UITabBarController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
[self presentViewController:tabBarController animated:YES completion:nil];
//====================================
应用委托更新
- (void)setupTabBar
//===Should be this
UITabBarController * tabBarController = (UITabBarController*)[self.window rootViewController];
//===Or this
UITabBarController * tabBarController = (UITabBarController*)[[[UIApplication sharedApplication] keyWindow] rootViewController];
if(tabBarController != nil)
((UIViewController*)[tabBarController.viewControllers objectAtIndex:1]).tabBarItem.title = @"Your desired Title";
【问题讨论】:
【参考方案1】:任何UIViewController
都有这个属性tabBarItem
,因为它是UIViewController
的扩展,所以你只需要获取你的viewController 并设置他的tabBarItem.title
property = "your desiredTitle"
更新
Objective-C 代码
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[self setupTabBar];
// Override point for customization after application launch.
return YES;
- (void)setupTabBar
UITabBarController * tabBarController = (UITabBarController*)[self.window rootViewController];
if(tabBarController != nil)
((UIViewController*)[tabBarController.viewControllers objectAtIndex:3]).tabBarItem.title = @"YourDesiredTitle";
Swift 代码
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
//Whatever you have here
self.setupTabBar()
return true
func setupTabBar()
if let tabBarController = self.window?.rootViewController as? UITabBarController
if let navigationsControllers = tabBarController.viewControllers as? [UIViewController]
navigationsControllers[3].tabBarItem.title = "YourTitle"
更新 #2
如果你想从代码中的任何地方调用这个方法,你必须
-
将您的 AppDelegate.h 导入您要使用的 .m 文件中
在您的 AppDelegate.h 中添加此方法,以便公开此方法
像这样调用这个方法:
代码
[(AppDelegate*)[UIApplication sharedApplication].delegate setupTabBar];
【讨论】:
如果我在每个视图中设置标题,我只会在单击标签栏项目时更改标题。我希望它在加载时更改为所需的标题。这是因为我想在中英文之间切换我的标题,请帮助。 @HansheungCheah 您需要在您的 appDelegate 中的 finishLoad 方法中执行此操作,但如果您想简单地翻译您的标题,您可以使用 NSLocalizedString 或本地化您的故事板来完成 我的中文标题是字符串,不用翻译。在 appDelegate 怎么做? 对不起,我正在用 Objective C 编码,你能帮忙吗? 哇,你是专家,它甚至可以使用不同的标签索引。这是工作。非常感谢。以上是关于在启动时以编程方式为 5 个选项卡栏项目设置选项卡栏标题,其中 4 个嵌入在导航控制器中,1 个没有。目标 C的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式使用 Swift 3 在所有视图控制器中显示选项卡栏?