将UINavigationController添加到tabbar应用程序

时间:2010-02-23 21:22:57

标签: iphone objective-c interface-builder uinavigationcontroller

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

我已经找到了关于这样做的文档,但它对我来说没有意义,或者似乎在飞过我的脑海。文档说你必须创建位于navcontroller视图中的uiviewcontroller,或者至少以编程方式引用它们。我一直在使用Interface构建器,并且使用它变得非常舒服,所以以编程方式做这些让我有点害怕。

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

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

以上摘自“适用于iPhoneOS的ViewController编程”苹果文档

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

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

希望这是有道理的。

任何帮助将不胜感激,

尼克

1 个答案:

答案 0 :(得分:1)

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

通常在以下位置完成:

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

这是UITableViewDelegate协议的一部分。

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

我不担心像“我应该在哪里实例化我的UINavigationController?”这样的琐事。马上。首先,让它工作。然后担心“应该”去哪里。

最好让UINavigationController工作在一个单独的项目中工作,然后将其折叠到您的主项目中。这使您可以在关注导航控制器时忽略许多小细节。