2014-02-25 27 views
3

我试图以编程方式制作UITabBarController。这似乎工作,我有2个选项卡,它没有显示第一次加载时RootViewController中的第二个标签标题的问题。怎么来的?UITabBarController不显示其他标签的标题

这是当RootViewController的加载:

enter image description here

当我点击在那里是没有标题的第二个选项卡,标题显示:

enter image description here

当我回去第二个标签标题仍然存在:

enter image description here

我的问题是为什么当RootViewController加载时不显示。

我在didFinishLaunchingWithOptions的appDelegate方法:

tabBarController = [[UITabBarController alloc] init]; 

MenuViewController *firstTab = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil]; 
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:firstTab]; 


FixtureViewController *secondTab = [[FixtureViewController alloc] initWithNibName:@"FixtureViewController" bundle:nil]; 
UINavigationController *navController2 = [[UINavigationController alloc] initWithRootViewController:secondTab]; 


self.tabBarController = [[UITabBarController alloc] init]; 
self.tabBarController.viewControllers = @[navController, navController2]; 

[self.window setRootViewController:tabBarController]; 
+0

你什么时候在每个视图控制器中设置'title'? 'viewDidLoad'?将其设置为'init'。 – Wain

回答

0

添加标题视图控制器:

firstTab.title = @"Title to display 1"; 
secondTab.title = @"Title to display 2"; 
+1

viewControllers应该设置自己的标题。恕我直言,这是不好的编码风格设置在父viewController的viewControllers属性 –

+0

@der_michael你如何将标题传递给子VC呢?如果逻辑(例如设置了什么标题)在父项中,则必须使用属性并将数据从父项传递给子项。 – Greg

+0

这取决于你的逻辑,但标签栏控件上的标题很少动态,以至于必须从包含的视图控制器之外进行设置......我只在视图控制器上设置了一个延迟加载的uinavigation项目,它将标题。 –

0

你应该设置的TabBar称号initialize方法,不ViewDidLoadviewDidAppear ..

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.tabBarItem.title = @"Tabbar Title"; 
    } 
    return self; 
} 
0

取代assi在RootViewController中指定title属性,你应该覆盖第一个/第二个viewController的tabBarItem属性。您可以将其加载到...

如果您在viewDidLoad()覆盖中设置title属性,则直到视图控制器实际上被加载并实际调用viewDidLoad()时才会应用它。您可以通过设置断点来检查自己,无论您设置标题/ tabBarItem。