如何使用它自己的navigationControllers从navigationController正确导航到tabBarController

时间:2010-07-10 06:37:38

标签: iphone uitableview uinavigationcontroller uitabbarcontroller pushviewcontroller

大家好,

我的iPhone应用程序存在一般设计问题。 我想知道如何从使用navigationController的普通视图到带有选项卡的tabBarController的主要原则,其中每个选项卡都有自己的navigationController(不再需要第一个navigationController)。

让我告诉你我是如何做到的:

首先,我通过一个按钮向navigationController添加了一些视图。 AppDelegate将此navigationController(当然还有视图控制器)作为子视图添加到窗口:

[window addSubview:navigationController.view];

当我到达那个新视图(在顶部有navigationController)时,我点击了一个按钮,它将我带到了具有tabBarController(带有他自己的navControllers)的新视图:

SearchViewController *searchViewController = [[SearchViewController alloc] initWithNibName:@"SearchView_iPhone" bundle:nil];
searchViewController.tabBarItem.title = @"FirstTab";
UINavigationController *searchNavigationController = [[UINavigationController alloc] initWithRootViewController:searchViewController];

SettingsViewController *settingsViewController = [[SettingsViewController alloc] initWithNibName:@"SettingsView_iPhone" bundle:nil];
settingsViewController.tabBarItem.title = @"SecondTab";
UINavigationController *settingsNavigationController = [[UINavigationController alloc] initWithRootViewController:settingsViewController];

//Add navigation controllers to tabBar controller
tabBarController = [[UITabBarController alloc] init];
tabBarController.viewControllers = [NSArray arrayWithObjects:searchNavigationController, dictionariesNavigationController, settingsNavigationController, nil];

好的,我将所有视图(使用navControllers)添加到tabBarController。我所要做的就是推动tabBarController看到:

[self.navigationController pushViewController:tabBarController animated:YES];

但之后我看到第一个视图中的navigationController仍然存在于tabBars的视图中。这是合乎逻辑的,因为我用tabController推送了tabBarController。所以我这样做是为了隐藏它:

self.navigationController.navigationBarHidden = YES;

现在看起来不错。所有tabBar视图都有自己的navController。

主要问题:当我想从settingsViewController中的子视图表(settingsTableViewCell)推送另一个视图(settingsResultsViewController)时,没有任何反应。这是代码:

SettingsResultsViewController *settingsResultsViewController = [[SettingsResultsViewController alloc] initWithNibName:@"SettingsResultsView_iPhone" bundle:nil];
[self.navigationController pushViewController:settingsResultsViewController animated:YES];

我也尝试用appDelegate推送这个视图:

[delegatePhone.settingsViewController.navigationController pushViewController:settingsResultsViewController animated:YES];
[delegatePhone.firstViewController.navigationController pushViewController:settingsResultsViewController animated:YES];

但是没有任何事情发生。

我认为主要问题在于navigationControllers。第一个navigationController仍然在后面的某个地方,而我想在当前的tabBar上使用当前的navController进行推送。

除了使用navigationController之外,有没有办法从第一个视图推送新视图(在我的情况下是tabBarController)?

我想要的只是当firstView上的按钮是clicke时,app将我带到tabBarController并忘记了firstView(和第一个navigationController) - 我不再需要它们了。

希望我说清楚。

感谢您的帮助。我非常喜欢它。

2 个答案:

答案 0 :(得分:0)

您可以通过调用presentModalViewController:animated:而不是将其推送到导航堆栈来显示标签栏控制器。如果您根本不需要第一个导航控制器,则应该用标准视图控制器替换它。

答案 1 :(得分:0)

Tweetie作者在一段时间内对标签栏和中殿控制器进行了评论。这个帖子有帮助吗?

Tab bar controller inside a navigation controller, or sharing a navigation root view