在启动时以编程方式为 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的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式返回选项卡栏控制器中的视图

iOS:选择选项卡之前的选项卡栏项目标题

以编程方式将选项卡栏控制器添加到当前 App Flow

如何以编程方式使用 Swift 3 在所有视图控制器中显示选项卡栏?

另一个选项卡栏项目中的一个选项卡栏项目中的 PopToRootViewController

导航到 UITabBarController 上的某个选项卡