设置UINavigationController的工具栏项

Ste*_*son 7 cocoa-touch interface-builder uitoolbar uinavigationcontroller uitoolbaritem

在iPhone OS 3.0中,您可以使用该setToolbarItems:animated:方法设置UINavigationController的工具栏项.但是,这需要您传入一个UIToolbarItem数组.虽然我可以以编程方式创建这些工具栏项,但我宁愿在Interface Builder中创建它们.

考虑到这一点,我在"MyGreatViewController.xib"中创建了一个UIToolbar,并用想要的工具栏项填充它.然后,在"MyGreatViewController.m"中,我从工具栏中获取项目并将它们传递给setToolbarItems:animated::

- (void)viewDidLoad {
    [super viewDidLoad];
    [self setToolbarItems: [toolbar items]];
}
Run Code Online (Sandbox Code Playgroud)

...在哪里toolbar是一个引用UIToolbar的IBOutlet.

这是一个好方法吗?有没有更好的方法来实现这一目标?我应该以编程方式创建项目吗?

Kri*_*son 12

我不知道这是否记录在任何地方,但我发现在Interface Builder中,如果启用导航控制器的工具栏,您可以将条形项目拖动到视图控制器,它们将自动显示在导航控制器的工具栏中.

例如,这是我们可以做的(在Snow Leopard上使用Xcode 3.2):

  1. 文件 - >新项目....选择基于导航的应用程序并创建项目.
  2. MainWindow.xib在Interface Builder中打开.
  3. 选择导航控制器,然后在"属性"检查器中,选中"显示工具栏"框.这将导致出现Toolbar对象.
  4. 将栏按钮项从库拖到工具栏.它将出现在工具栏中.如果您检查NIB中的层次结构,您将看到此新项目是该项目的子项RootViewController.

似乎添加为导航项的子项的任何条形按钮项将显示在导航栏中,并且作为视图控制器的子项添加的任何条形按钮项将显示在工具栏中.

(我偶然发现了这个.如果有人能找到这种行为的文档,或者任何其他信息,我想听听它.)

  • 我知道这是超级老,但你知道如何为RootViewController的子视图做这个吗?换句话说,如果在RootViewController的代码中我创建了一个自己的nib中的FooController并将其推送,那么如何在Interface Builder中设置FooController的工具栏按钮? (4认同)

iKe*_*dac 4

这是一种完全可以接受的方法,但请记住,在 iPhone 上加载 xib 文件非常昂贵,并且在 viewDidLoad 方法中以编程方式创建工具栏项可能会更快。

  • 伟大的。由于当视图控制器类初始化时 XIB 已经被加载(我在创建视图控制器文件时选中了“使用 XIB 作为用户界面”),因此这种方法不应该比以编程方式创建工具栏项更昂贵。 (3认同)