大家好,
我对 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) - 我不再需要它们了。
希望我说清楚了。
感谢你的帮助。我真的很欣赏它。