标签栏项目标题出现在故事​​板之前

时间:2012-04-10 12:31:35

标签: iphone uitabbarcontroller storyboard

我的应用程序以标签栏控制器开始,该控制器有5个标签。在开始时,第一个显示其名称,但其他四个没有名称,直到我点击它们。然后根据用户使用的语言显示名称。 如何在标签栏出现之前设置选项卡的名称? 我正在使用故事板。有没有办法在编程栏中以编程方式设置标题,而所有其余的都是用故事板完成的?我在AppDelegate中尝试了类似[FirstViewController setTitle:NSLocalizedString(@"Titel1", nil)];的内容 但是我得到一个错误,即选择器setTitle没有类方法。 感谢。

5 个答案:

答案 0 :(得分:12)

我今天遇到了同样的问题。我也在使用故事板。在我的情况下,我使用以下方式。

  1. 我创建了一个名为的新“Objective-C类” “MainTabBarViewController”作为“UITabBarController”的子类。
  2. 在“身份检查员”的故事板中,我将“自定义类”更改为“MainTabBarViewController”。

  3. 在“MainTabBarViewController”中的方法“viewDidLoad”中我添加了:

    [[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)];

  4. 我想这不是一种可行的方式,但对我而言,它是完美的。

答案 1 :(得分:3)

我有一个包含两个标签的配置:

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

在使用Storyboard和ARC的配置中,我覆盖了我的UITabBarController视图控制器的自定义类中的initWithCoder:选择器(在本例中为ContactsNavigationController)并初始化tabBarItem.title,如下所示:

@implementation ContactsNavigationController

...

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

在使用故事板时,当在UITabBarController启动期间初始化故事板视图控制器时,iOS会调用(id)initWithCoder:而不是-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil。另请注意,在从选项卡栏中选择视图控制器选项卡之前,不会调用viewDidLoad

答案 2 :(得分:1)

在创建视图控制器的app delegate中,在此处设置title属性(而不是viewDidLoad),例如:

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

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

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

答案 3 :(得分:0)

如果您使用基于- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil方法的模板Tab-Bar应用程序查看Xcode创建的FirstViewController,您可以看到如下内容:

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

因此,您必须检查您的语言,然后设置title属性,这将在标签栏和导航栏中设置标题。

答案 4 :(得分:0)

试试这个,在每个视图中你都必须使用这个方法

假设这是您第一次观看

-(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;
}

在你的应用委托类中编写此代码以添加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];

中添加以上代码
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {}