iphone - 带有NavigationController的Tabbar应用程序,没有MainWindow.xib

时间:2011-11-01 04:46:49

标签: iphone tabbar navigationcontroller

Hihi all,

我是iPhone开发中的新手。我已经按照一些教程创建了一个tabbar应用程序。以下是appdelegate实现中的代码:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
UIViewController *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil];

self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

然后在每个控制器实现中为选项卡设置标题和图像。

我的问题是,例如,在我的viewController1中,我需要导航到viewController3,当我使用presentModalViewController方法推送viewController3时,底部的tabbar将会消失。

虽然我尝试使用app委托引用我的tabBarController,并使用tabBarController.navigationController pushViewController方法,但我的viewController3没有被推送,似乎没有任何反应。

我尝试过几个教程,但是需要将导航控制器拖入MainWindow.xib,在xcode 4中,MainWindow.xib不再存在。如何从代码创建navigationcontroller,以便应用程序可以在不同的视图之间导航而不隐藏tabbar?

非常感谢任何评论!提前谢谢!

:)

2 个答案:

答案 0 :(得分:3)

如果要使用导航控制器,则需要创建导航控制器。由于您没有使用XIB,因此您必须手动创建它。

由于您希望在显示viewController3时标签栏保持可见,因此您需要使导航控制器成为标签栏控制器的子项。

UIViewController *viewController1 = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
UINavigationController *navController1 = [[UINavigationController alloc] initWithRootViewController:viewController1];
UIViewController *viewController2 = [[ViewController2 alloc] initWithNibName:@"ViewController2" bundle:nil];

self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:
    navController1,
    viewController2,
    nil];

然后,当您想要呈现viewController3时,请执行以下操作:

// in some method of viewController1
[self.navigationController pushViewController:viewController3 animated:YES];

答案 1 :(得分:0)

我不是很确定,但你试过这个???其实我很快就会使用XCode 4,我仍在使用3.2.8版本: -

WebViewController *viewController = [[WebViewController alloc]initWithNibName:@"WebViewController" bundle:nil];
    viewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:viewController animated:YES];
    [viewController release];

在此导航到第3个屏幕时,也会删除标签栏,您必须提供导航栏才能返回。

希望它有所帮助.. :)