UIViewController:setToolbarItems vs navigationItem

时间:2010-12-28 03:43:47

标签: iphone objective-c

我的应用程序有一个UIViewController子类,由UINavigationController管理。

在我的UIViewController子类的viewDidLoad中,我试图将UIBarButtonItem添加到工具栏中,如下所示:

settingsButton = [[UIBarButtonItem alloc] initWithTitle:@"Settings"
   style:UIBarButtonItemStylePlain target:self action:@selector(viewSettings:)];
[self setToolbarItems:[NSArray arrayWithObject:settingsButton]];

这对我不起作用,所以经过一些谷歌搜索后,我尝试了这个:

[[self navigationItem] setRightBarButtonItem:settingsButton];

这很好。从阅读UIViewController documentation开始,我仍然对为什么setToolbarItems不起作用感到困惑。我在调试器中验证了该按钮位于viewDidAppear方法的toolbarItems数组中。按钮本身没有出现在我的工具栏上。

所以,我的问题是,为什么setToolbarItems在第一个代码片段中没有为我工作?

我根本没有在我的xib中为这个视图控制器配置工具栏,如果这有所不同。

4 个答案:

答案 0 :(得分:5)

是的,有所不同。默认情况下,对于非实际工具栏的导航应用程序,默认情况下会在视图上看到一个栏,导航栏。您可以通过引用self.navigationItem来添加项目。

答案 1 :(得分:1)

  1. [self setToolbarItems:[NSArray arrayWithObject:settingsButton]];基本上填充导航控制器的底部工具栏 - 而不是左右顶部栏按钮。

  2. 默认情况下,底部工具栏不会显示。要显示它,你必须调用[self.navigationController setToolbarHidden:NO]

  3. 以下是相关文档 - UINavigationController类参考 工具栏:

  4.   

    与导航控制器关联的自定义工具栏。   (只读)

         

    @property(非原子,只读)UIToolbar *工具栏讨论这个   property包含对由其管理的内置工具栏的引用   导航控制器。仅提供对此工具栏的访问权限   想要从工具栏中显示操作表的客户端。您   不应该直接修改UIToolbar对象。

         

    此工具栏的内容管理是通过自定义视图完成的   与此导航控制器关联的控制器。对于每个视图   在导航堆栈上的控制器,您可以分配一组自定义   工具栏项使用setToolbarItems:animated:方法   的UIViewController。

         

    此工具栏的可见性由toolbarHidden控制   属性。工具栏还遵循hidesBottomBarWhenPushed属性   当前可见的视图控制器和隐藏并显示自身   根据需要自动生成。

答案 2 :(得分:0)

尝试使用

[toolbar setItems:[NSArray arrayWithObject:settingsButton] animated:YES];

而不是:

[self setToolbarItems:[NSArray arrayWithObject:settingsButton]];

SHANI

答案 3 :(得分:0)

在ipad应用程序中,您必须将工具栏项设置为" topViewController" (是的,这是违反直觉的)。

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:catView];
UIBarButtonItem *item1 = [[UIBarButtonItem alloc] initWithTitle:@"item 1" style:UIBarButtonItemStylePlain target:nil action:nil];
UIBarButtonItem *item2 = [[UIBarButtonItem alloc] initWithTitle:@"item 2" style:UIBarButtonItemStylePlain target:nil action:nil];
[nav setToolbarHidden:NO animated:YES];
// WRONG: [nav setToolbarItems:[NSArray arrayWithObjects:addButton, nil]];
// CORRECT (for ipad apps):
[nav.topViewController setToolbarItems:[NSArray arrayWithObjects:item1, item2, nil] animated:NO];
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:nav];