2011-10-25 58 views
0

我正在创建基于UTabbarController的应用程序。我以编程方式创建了该标签栏。一切运行良好,除非我看不到tabBatItem标题。我已经正确地初始化了所有东西,但是当应用程序启动时,我可以看到的是第一个tabbar标题。但如果我选择第二tabbaritem左右,我可以看到他们的名字。我不知道这里出了什么问题。这是我的代码。如果我犯了任何错误,请告诉我。UITabBarController不显示tabbarItems名称

谢谢。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

    HomeViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil]; 
UINavigationController*navController1=[[UINavigationController alloc]initWithRootViewController:viewController1]; 
[email protected]"Home"; 
[viewController1 release]; 

TrainerTableViewController *viewController2 = [[TrainerTableViewController alloc] initWithNibName:@"TrainerTableViewController" bundle:nil]; 
UINavigationController*navController2=[[UINavigationController alloc]initWithRootViewController:viewController2]; 
[email protected]"Trainer"; 
[viewController2 release]; 

SettingsTableViewController *viewController8 = [[[SettingsTableViewController alloc] initWithNibName:@"SettingsTableViewController" bundle:nil] autorelease]; 
UINavigationController*navController8=[[[UINavigationController alloc]initWithRootViewController:viewController8]autorelease]; 
[email protected]"Settings"; 

AboutUsViewController *viewController9 = [[[AboutUsViewController alloc] initWithNibName:@"AboutUsViewController" bundle:nil] autorelease]; 
UINavigationController*navController9=[[[UINavigationController alloc]initWithRootViewController:viewController9]autorelease]; 
[email protected]"About Us"; 


self.tabBarController = [[[UITabBarController alloc] init] autorelease]; 
self.tabBarController.viewControllers = [NSArray arrayWithObjects:navController1, navController2,navController8, navController9, nil]; 

[navController1 release]; 
[navController2 release]; 
self.window.rootViewController = self.tabBarController; 
[self.window makeKeyAndVisible]; 
return YES; 
} 

回答

3

您可以通过在每个标签栏项目的视图控制器的.m文件中包含以下代码来完成此操作。该代码还包括如何更改标签栏上的图像。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization. 
     self.title = @"Apply Now"; 
     self.tabBarItem.image = [UIImage imageNamed:@"tbApplyNow.png"]; 
    } 
    return self; 
} 
+0

谢谢@Louie!你节省了我的一天.. +1的答案。但我有一个问题:为什么它只使用initWithNibName而不使用viewDidLoad? –

0

你只设置了标题navController1。对于您创建的每个控制器控制器,您需要为该控制器设置标题。

试试这个:

CHANGE: navController1.title = @ “培训师”; TO navController2.title = @“Trainer”;

更改: navController1.title = @“设置”; TO navController8.title = @“设置”;

更改: navController1.title = @“关于我们”; TO navController9.title = @“关于我们”;

而且不是你不释放navController8或9,这将导致内存泄漏

0

你实际上是设置标题为NavigationControllers。另外,请注意您的代码会多次设置navController1的标题,而不是为其他人设置它。

您可以通过为每个控制器设置tabBarItem来设置tabBar的标题。

您可以选择继承,也可以将其包含在AppDelegate的application:didFinishLaunchingWithOptions:方法中。

下面是一个例子:

UITabBarItem *tbi1 = [navController1 tabBarItem]; 
[tbi1 setTitle:@"Home"]; 

UIImage *i1 = [UIImage imageNamed:@"hometabicon.png"]; 
[tbi1 setImage:i1]; 

这将设置TAB1到“家”的称号,并会使用TabBar图标设置为一个名为“hometabicon.png”文件。

您可以为每个其他选项卡重复相同的模式。

+0

非常感谢您的帮助。 – slonkar

2

解决这个问题的最好办法是设置的viewController的标题不navigationController

viewController1.tabBarItem.title = @"CohesiveSelf"; 

这样做对所有的选项卡。