0

我有一个三视图标签栏应用程序的第二个视图,我想包含一个导航控制器。在navcontroller中,第一个/根视图将是一个包含uitableview的自定义uiview,当你触摸一个单元格时将会推入另一个自定义的uiview来公开关于被触摸的单元格的细节。添加一个UINavigationController到标签栏应用程序

我发现了这样做的文档,但它对我来说没有任何意义,或者似乎是飞过了我的脑海。该文档说,你必须创建位于navcontroller视图的uiviewcontroller,或者至少以编程方式引用它们。我一直在使用Interface Builder,并且使用它变得非常舒服,所以它在编程上使我感到有些害怕。

而且,这条从文档代码似乎令人不安:

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

以上摘自“视图控制器编程为的iPhoneOS”苹果文档

不会这个负载并立即显示UINavigationView?

一个问题是我不想立即显示navView。 navController/stack是辅助选项卡。所以我如何以及在哪里实施我的navController(现在我已经在我的委托中激活了它(我认为是正确的)?我已经能够使用导航栏和空白视图加载基本的UInavigationController,--minus自定义内容视图,通过界面生成器,但我在一个头绪来填充自定义内容的意见。

希望这是有道理的。

任何帮助,将不胜感激,

尼克

回答

1

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

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

哪个是的UITableViewDelegate协议的一部分:

这在典型的做法。

因此,当调用tableView:didSelectRowAtIndexPath时,您需要计算出哪个UIViewController推入堆栈。您可以从一个笔尖加载该View Controller,或者以编程方式创建它。既然你对IB感到舒服,我会建议从笔尖加载它。

我不担心像“我应该在哪里实例化我的UINavigationController?马上。首先,让它工作。然后担心事情“应该”发生的地方。

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

+0

这很有道理,我一直在使用didselectrowatindexpath,所以我对这种方法很熟悉,但是我仍然对我在这里应该做的事情有点困惑,我是否会向uinavcontroller发送一条消息(如果是这样的话什么信息?)?加上我甚至不能让自定义的uitableview显示为uinavcontroller的自定义内容区域中的根控制器,所以如果你得到我的漂移,没有办法在索引路径上选择一行。感谢任何澄清。 Nick – nickthedude 2010-02-23 23:08:11

+0

我也喜欢你的想法,把它分解成一个单独的应用程序,只是为了简化它,直到它是有道理的。谢谢。 – nickthedude 2010-02-23 23:36:51

+0

在tableView:didSelectRowAtIndexPath中:您应该向您的导航控制器发送pushView消息。您需要提供UIViewController作为pushView的参数。这是控制您希望激活的视图的VC。您可以以编程方式创建它或从笔尖加载它。 – 2010-02-24 04:26:37

相关问题