7

在iPhone OS 3.0中,您可以使用setToolbarItems:animated:方法设置UINavigationController的工具栏项目。但是,这需要您传递一个UIToolbarItems数组。尽管我可以通过编程方式创建这些工具栏项目,但如果可能的话,我宁愿在Interface Builder中创建它们。设置UINavigationController的工具栏项目

考虑到这一点,我已经在“MyGreatViewController.xib”中创建了一个UIToolbar,并将其填入了想要的工具栏项目。然后,在“MyGreatViewController.m”,我从工具栏的项目,并将它们传递到setToolbarItems:animated:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self setToolbarItems: [toolbar items]]; 
} 

...其中toolbar是一个IBOutlet指UIToolbar。

这是一个很好的方法吗?有没有更好的方法来完成这一点?我应该只是以编程方式创建项目?

+0

我不明白的东西:你说“我从工具栏中获取项目“,但是你会将它们还给工具栏?他们不是已经显示过了吗? – Oscar 2010-12-09 00:59:05

回答

4

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

+3

太好了。由于XIB在视图控制器类初始化时已经被加载(我在创建视图控制器文件时选中了“使用XIB作为用户界面”),所以这种方法不应该比以编程方式创建工具栏项目更昂贵。 – 2009-08-22 11:44:07

+0

啊,如果你已经加载了XIB,那么你不会增加太多的额外时间。取消存档XIB *中的对象比在代码中创建对象更加昂贵,但除非您的视图需要很长时间才能加载,否则我不担心。 – iKenndac 2009-08-22 14:23:30

12

我不知道这是否记录在任何地方,但我发现在界面生成器中,如果启用导航控制器的工具栏,则可以将栏项拖动到视图控制器,它们将自动显示在导航控制器的工具栏。

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

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

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

(我偶然无意中发现这一点,如果任何人都可以对这种行为找到文档,或任何其他信息,我想听到它。)

+0

我相信这就是它应该的样子。有点像'UIViewController'魔法加载它的xib,如果它有一个匹配的文件名。 – Sneakyness 2010-05-14 16:53:00

+0

它的工作原理!我认为,这绝对是在导航视图中设置工具栏的最佳方式。 – Nathan 2010-09-24 02:53:58

+0

在我的应用程序中,我有一个选项卡栏控制器,其中一个选项卡是一个navigationController - 非常标准的配置。但是,如果我按照Kristopher的建议,在步骤3之后,工具栏出现在IB的标签栏后面!当我尝试第4步时(我试图添加段控制/按钮),它只是不允许我把它放在工具栏上。我在这里错过了什么吗? – Dev 2010-10-07 07:39:03

相关问题