3

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

4

5 回答 5

12

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

  1. 我创建了一个名为“MainTabBarViewController”的新“Objective-C 类”作为“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)];

我想这不是完美的方式,但对我来说它很完美。

于 2012-05-20T01:03:45.270 回答
3

我有一个带有两个这样的选项卡的配置:

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

在使用 Storyboard 和 ARC 的配置中,我覆盖了initWithCoder:我的 UITabBarController 视图控制器(在这种情况下)的自定义类中的选择器,ContactsNavigationController并像这样初始化tabBarItem.title那里:

@implementation ContactsNavigationController

...

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

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

于 2014-03-23T17:28:56.650 回答
1

在您正在创建视图控制器的应用程序委托中,在此处(而不是在 中viewDidLoad)设置 title 属性,例如:

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

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

tabBarController.viewControllers = [[NSArray alloc] initWithObjects:vc1, vc2, nil];
于 2012-04-10T12:35:50.417 回答
0

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

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

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

于 2012-04-10T12:47:32.783 回答
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 {} 
于 2012-04-10T12:52:08.230 回答