Tab Bar Item title before appear Storyboard

ε祈祈猫儿з 提交于 2019-12-05 18:29:28

I had the same problem today. I'm using storyboard too. In my case i used the following way.

  1. I've created a new "Objective-C class" with the name "MainTabBarViewController" as a subclass of "UITabBarController".
  2. In my storyboard in "identity inspector" i changed "Custom class" to "MainTabBarViewController".

  3. In the method "viewDidLoad" in "MainTabBarViewController" i added:

    [[self.viewControllers objectAtIndex:0] setTitle:NSLocalizedString(@"home", nil)];

    [[self.viewControllers objectAtIndex:1] setTitle:NSLocalizedString(@"statistics", nil)];

    [[self.viewControllers objectAtIndex:2] setTitle:NSLocalizedString(@"settings", nil)];

    [[self.viewControllers objectAtIndex:3] setTitle:NSLocalizedString(@"info", nil)];

I guess it is not the perferct way, but for me it works perfect.

I had a configuration with two tabs like this:

MainTabBarController : UITabBarController
    +- MessagesNavigationController : UINavigationController
    +- ContactsNavigationController : UINavigationController

In a configuration with Storyboard and ARC I overrode the initWithCoder: selector in the custom classes of my UITabBarController view controllers (in this case ContactsNavigationController) and initialized the tabBarItem.title there like this:

@implementation ContactsNavigationController

...

- (id)initWithCoder:(NSCoder *)decoder
{
    self = [super initWithCoder:decoder];
    if (self) {
        self.tabBarItem.title = NSLocalizedString(@"Contacts", nil);
    }
    return self;
}

When using storyboards the iOS calls (id)initWithCoder: instead of -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil when the storyboard view controller is initialized during UITabBarController launch. Also note that viewDidLoad doesn't get called until the view controller tab is selected from the tab bar.

In the app delegate, where you are creating the view controllers, set the title property here (rather than in viewDidLoad), for example:

vc1 = [[VC1 alloc] init];
vc1.title = @"List";

vc2 = [[VC2 alloc] init];
vc2.title = @"Map";

tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil];
Mat

If you take a look at the FirstViewController created by Xcode using the template Tab-Bar application based in the - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil method you can see something like this:

if (self) {  
    //check your language
    self.title = NSLocalizedString(@"First", @"First");
    self.tabBarItem.image = [UIImage imageNamed:@"first"];  
}  

So you have to check for your language and then set the title property, this will set the title on the tab bar and in the navigation bar.

freelancer

Try this, in every view u have to use this method

Suppose this is you first view

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

    if (self) {
        self.title = NSLocalizedString(@"homepage", @"homepage");
        [self.tabBarItem setTag:0];
        self.tabBarItem.image = [UIImage imageNamed:@"homepage"];
    }
    return self;
}

In you app delegate class write this code to add UITabBarController

self.tabBarController = [[[UITabBarController alloc] init] autorelease];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2,viewController3,viewController4,viewController5, nil];
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

Add above code in

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {} 
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!