我的应用程序有一个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中为这个视图控制器配置工具栏,如果这有所不同。
答案 0 :(得分:5)
是的,有所不同。默认情况下,对于非实际工具栏的导航应用程序,默认情况下会在视图上看到一个栏,导航栏。您可以通过引用self.navigationItem来添加项目。
答案 1 :(得分:1)
[self setToolbarItems:[NSArray arrayWithObject:settingsButton]];基本上填充导航控制器的底部工具栏 - 而不是左右顶部栏按钮。
默认情况下,底部工具栏不会显示。要显示它,你必须调用[self.navigationController setToolbarHidden:NO]
以下是相关文档 - UINavigationController类参考 工具栏:
与导航控制器关联的自定义工具栏。 (只读)
@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];