【发布时间】:2009-11-09 20:59:26
【问题描述】:
这个问题可能以前有人问过,但我的google-fu肯定不如别人,因为我想不通。
我正在使用 iPhone SDK,并且正在构建一个我一直在考虑的概念应用程序。如果我们看一下使用基于导航的应用程序生成的骨架,MainWindow.xib 包含一个导航控制器,其中包含一个根视图控制器(以及一个导航栏和工具栏,如果您稍微尝试一下的话)。根视图控制器具有与之关联的 RootViewController-nib,它会加载表视图。
到目前为止一切顺利。要将内容添加到工具栏和导航栏,我应该将它们添加到根视图控制器下方的层次结构中(这有效,没问题)。但是,我无法弄清楚的是,这仍然在 MainWindow.xib 中(或者,在运行时,nib)。我将如何定义一个 xib 以便它从中获取工具栏项目?
我想做(相当于,这里只是重用名字)
RootViewController *controller = [[RootViewController alloc] initWithNibName:nil bundle:nil];
[self.navigationController pushViewController:controller animated:YES];
[controller release];
并让导航控制器拾取该笔尖中定义的工具栏项目。放置它的逻辑位置是文件所有者(类型为 RootViewController)下的层次结构中,但似乎不可能。
目前,我在viewDidLoad 方法中手动分配这些(navigationItem 和toolbarItems),或者直接在MainWindow.xib 中定义它们以在应用初始化时加载。
有什么想法吗?
编辑
我想我会尝试用图片来解释。这是主窗口的界面生成器,几乎就像它来自向导以创建基于导航的项目一样。为了清楚起见,我添加了一个工具栏项。您可以看到带有工具栏和导航栏的导航控制器,以及根视图控制器。
IB Screenshot http://img526.imageshack.us/img526/3507/rootviewcontroller.png
基本上,根视图控制器有一个条形按钮项和一个导航项,如您所见。问题是,它还有一个与之关联的 nib,它在加载时将实例化一个视图,并将其分配给控制器的视图出口(在该 nib 中,它是文件的所有者,类型为 RootViewController,应该是)。
如何将工具栏项和导航项放入另一个 nib 中,即 RootViewController.nib,以便我可以在此处删除它们。 RootViewController.nib 将其他所有内容添加到 Root View Controller,为什么不添加这些项目?
背景是我想简单地实例化 RootViewController,用它自己的 nib 初始化它(即上面显示的 initWithNibName:nil),然后将它推送到导航控制器上,而不必在编码中添加导航/工具栏项(就像我现在做的那样)。
【问题讨论】:
标签: iphone uikit interface-builder