【问题标题】:Toolbar items in sub-nib子笔尖中的工具栏项目
【发布时间】: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


    【解决方案1】:

    首先,您提出问题的方式在这里有点令人困惑,但我想我明白了。

    这里有几个选项。如果你想设计你的工具栏,只需在你正在加载的视图中添加一个,然后在 Interface Builder 中将各种按钮和分隔符拖到它上面。然后在该视图的视图控制器中创建 IBActions 并将连接从工具栏项拖动到各种操作。然而,由于您使用导航控制器,因此,您将想通过选中“UB Inspector中的”属性“选项卡在”MainWindow.xib中“默认情况下隐藏您默认默认默认的工具栏(IB Inspector中的”属性“选项卡)。

    alt text http://cimgf.com/files/toolbarthing.png

    或者,您可以通过调用 [self setToolbarItems:items] 以编程方式在 viewDidLoad 方法中添加工具栏项;其中 items 是工具栏项的 NSArray。

    据我所知,确实没有办法让导航控制器使用您的自定义工具栏。只需隐藏主要的并使用您的自定义。

    【讨论】:

    • 嗨,马特,我想我的问题太令人困惑了.. :) 我不知道如何让它更清楚。我想要做的是:它出现在 IB 中,好像您必须将工具栏项分配给 uicontroller(有意义..),但是,如果我希望这个 uicontroller 在单独的 nib 中定义导航控制器已定义(仅用于我的根视图控制器的笔尖),我想我必须将它们分配给文件所有者(因为它已经创建),但 IB 不会让我这样做。如果我现在不以编程方式定义工具栏项,我将如何定义?这清楚了吗?:)
    • 我的意思是,ui-controller 不应该在一个单独的 nib 中,它将以编程方式分配,我只想用包含工具栏项的 nib 来初始化它。也许这是一种更好的表达方式。
    • 您可以通过调用从任何 nib 获取控件数组: NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"ToolbarViewController" owner:self options:nil];然后您可以通过数组索引或标签(您可以在 IB 中指定)访问每个视图。不过,我不确定我是否仍然理解这个问题。
    • 好的,我今晚试着截几张截图,也许我可以用图片更好地表达出来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多