1

大家好,

我对 iPhone 应用程序有一个普遍的设计问题。我想知道如何从带有 navigationController 的普通视图转到带有标签的 tabBarController 的主要原理,其中每个标签都有自己的 navigationController(不再需要第一个 navigationController)。

让我告诉你我是怎么做到的:

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

[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];

好的,我将所有视图(带有导航控制器)添加到 tabBarController。我所要做的就是推动 tabBarController 被看到:

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

但在那之后,我看到第一个视图中的 navigationController 仍然存在于带有 tabBars 的视图中。这是合乎逻辑的,因为我用 navigationController 推送了 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 上的按钮时,该应用程序将我带到 tabBarController 并完全忘记 firstView(和第一个 navigationController) - 我不再需要它们了。

希望我说清楚了。

感谢你的帮助。我真的很欣赏它。

4

2 回答 2

0

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

于 2010-07-10T12:05:57.820 回答
0

Tweetie 作者不久前在一个关于标签栏和中殿控制器的帖子中发表了评论。这个线程有帮助吗?

导航控制器内的标签栏控制器,或共享导航根视图

于 2010-07-11T06:21:49.330 回答