将 UINavigationController 添加到标签栏应用程序

Posted

技术标签:

【中文标题】将 UINavigationController 添加到标签栏应用程序【英文标题】:Adding a UINavigationController to a tabbar application 【发布时间】:2010-02-23 21:22:56 【问题描述】:

我有一个三视图标签栏应用程序,第二个视图我想包含一个导航控制器。在导航控制器中,第一个/根视图将是一个自定义 uiview,其中包含一个 uitableview,当您触摸一个单元格时,它将推送另一个自定义 uiview 以显示有关触摸单元格的详细信息。

我找到了有关执行此操作的文档,但这对我来说没有意义,或者似乎在我的脑海中浮现。文档说您必须创建位于 navcontroller 视图中的 uiviewcontroller,或者至少以编程方式引用它们。我一直在使用 Interface builder 并且使用它变得非常舒服,所以以编程方式执行它让我有点害怕。

此外,文档中的这段代码似乎令人不安:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
[window addSubview:myNavigationController.view];
 

以上摘自“ViewController Programming for iPhoneOS”苹果文档

这不会立即加载并显示 UINavigationView 吗?

一个问题是我不想立即显示 navView。 navController/stack 是辅助选项卡。那么我如何以及在哪里实现我的导航控制器(现在我在我的委托中安装了它(我认为这是正确的)?我已经能够加载一个带有导航栏和空白视图的基本 UInavigationController,--minus自定义内容视图,通过界面生成器,但我不知道如何填充自定义内容视图。

希望这是有道理的。

任何帮助将不胜感激,

尼克

【问题讨论】:

【参考方案1】:

首先要了解 UINavigationController 的工作原理。它推送 UIViewControllers,而不是视图。因此,当您的第二个选项卡(UINavigationController 所在的位置)发生某些事情时,您会将 UIViewController 推送到堆栈中。

这通常在:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

这是 UITableViewDelegate 协议的一部分。

因此,当调用 tableView:didSelectRowAtIndexPath 时,您需要确定将哪个 UIViewController 推入堆栈。您可以从 nib 加载此 View Controller,也可以通过编程方式创建它。由于您对 IB 感到满意,因此我建议您从 nib 加载它。

我不会担心诸如“我应该在哪里实例化我的 UINavigationController?”之类的琐事。现在。首先,让它工作。然后担心事情“应该”去哪里。

最好让 UINavigationController 的东西在一个单独的项目中工作,然后将它折叠到你的主项目中。这可以让您在专注于导航控制器时忽略很多小细节。

【讨论】:

这是有道理的,我一直在使用 didselectrowatindexpath,所以我对这种方法很熟悉,但是我仍然对我应该在这里实际做什么感到有点困惑,我要发送 uinavcontroller一条消息(如果有的话是什么消息?)?另外,我什至无法让自定义 uitableview 显示为 uinavcontroller 的自定义内容区域中的根控制器,因此如果您发现我的偏差,就无法在索引路径中选择一行。感谢任何澄清。尼克 我也喜欢您将其拆分为一个单独的应用程序的想法,只是为了简化它直到它有意义。谢谢。 在 tableView:didSelectRowAtIndexPath: 你应该发送一个 pushView 消息到你的导航控制器。您需要将 UIViewController 作为参数提供给 pushView。这是控制您希望激活的视图的 VC。您可以通过编程方式创建它或从 nib 加载它。

以上是关于将 UINavigationController 添加到标签栏应用程序的主要内容,如果未能解决你的问题,请参考以下文章

将 UIViewController 放在 UINavigationController 堆栈之上

将 UIViewController 添加到 UINavigationController 的问题

如何将 UIView 添加到 UINavigationController 堆栈

将 UINavigationBar 添加到没有 UINavigationController 的 UITableViewController

为啥我们将 UIViewController 传递给 UINavigationController 类?

如何将 CAGradientLayer 应用于 UINavigationController 背景