在Startup for 5 Tab Bar项目中以编程方式设置Tab键标题,其中4个嵌入在Navigation Controller中,1则不是。目标C.

时间:2018-04-30 07:43:18

标签: ios objective-c uinavigationcontroller appdelegate tabview

如何在启动时设置标签栏标题或AppDelegates。我有5个Tab Bar Item,其中4个嵌入在Navigation Controller中,1个没有,只有tab bar item。请参阅下面的图片

Pic

在调用方法

的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];
 }
    //====================================

更新app delegate

 - (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 个答案:

答案 0 :(得分:2)

任何UIViewController都有此属性tabBarItem,因为它是UIViewController的扩展名,所以您只需要获取viewController并设置他的tabBarItem.title property =“your desiredTitle”< / p>

更新

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 Code

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

如果您想从代码中的任何位置调用此方法,则必须

  1. 在.m中导入您想要使用它的AppDelegate.h
  2. 在AppDelegate.h中添加此方法以使此方法公开
  3. 这样称呼这个方法:
  4. <强>代码

       [(AppDelegate*)[UIApplication sharedApplication].delegate setupTabBar];
    

    enter image description here