与UITabBarController结合使用时,UINavigationBar显示不正确

时间:2011-09-24 11:29:23

标签: iphone cocoa-touch ios4 uinavigationcontroller uitabbarcontroller

我正在尝试使用另一个UINavigationViewController和UIViewController子类为UITabBarViewController创建主屏幕。

在申请中,有:

  • 用于加载NewsController和VideoController的两个标签
  • 在应用程序完成启动时立即加载的HomeViewController。

这是我的应用程序截屏。

HomeViewController enter image description here

NavigationBar显示了一半

NewsViewController enter image description here

这是我的代码。

//在TabBarWithHomeDelegate.m

- (BOOL)application:(UIApplication *)application 
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    homeViewController = [[HomeViewController alloc]init];

    UINavigationController *nav = [[UINavigationController alloc]init];

    nav.navigationItem.title = @"Tab 1 Data";
    [nav pushViewController:homeViewController animated:NO]; 


    [self.tabBarController setSelectedViewController:nav];

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

//在NewsViewController.m中触摸主页按钮

-(IBAction) homeButtonClick:(id)sender
{
        TabBarWithHomeAppDelegate * appDelegate 
        = [[UIApplication sharedApplication] delegate];

        UITabBarController * tabBarController =  appDelegate.tabBarController;
        [tabBarController setSelectedViewController:nil];
        [tabBarController setSelectedViewController:appDelegate.homeViewController];

}

另外,我附上了源代码。如果你看到我会成为毕业生并帮助我解决这个问题。事实上,我试着差不多6个小时就完成了。

link to download source code.

2 个答案:

答案 0 :(得分:1)

您的HomeViewController未被指定为UITabBarController中的选项卡,因此您不应该调用:

[tabBarController setSelectedViewController:appDelegate.homeViewController];

你应该让它成为一个真正的标签或做一些不同的事情。我建议打电话

[tabBarController presentModalViewController:homeViewController animated:YES];

您将无法在此方案中看到标签栏,因此您需要一种不同的方法来关闭homeViewController。但是,这更为正确,因为用户看到当前没有选中标签的标签栏控制器没有任何意义。

答案 1 :(得分:0)

我只是在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中对您的代码进行评论,并且一切正常:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window.rootViewController = self.tabBarController;
    [self.window makeKeyAndVisible];
    return YES;
}