将工具栏添加到导航视图控制器的正确方法是啥?

Posted

技术标签:

【中文标题】将工具栏添加到导航视图控制器的正确方法是啥?【英文标题】:What is the correct way to add a toolbar to a navigation viewcontroller?将工具栏添加到导航视图控制器的正确方法是什么? 【发布时间】:2011-10-18 15:33:04 【问题描述】:

所以我试图将 UIToolbar 添加到 UIViewController 中,它是 UINavigation 层次结构的一部分,我想知道最好的方法是什么。我知道在 ios3 中,他们使作为导航层次结构一部分的每个视图控制器都拥有自己的工具栏,所以我认为这是最好的方法。但是,我正在做的语法困扰着我,因为我使用三种不同类型的语法来添加工具栏,如下所示:

[[self navigationController] setToolbarHidden:NO]; 
[self setToolbarItems: myToolbarButtons];
[[[self navigationController] toolbar]setBarStyle:UIBarStyleBlack];

这很好用,实际上修复了当我将工具栏添加到导航视图的子视图时的错误内存访问。但是我不明白在使工具栏可见后如何执行“self setToolbarItems”。那么它会成为视图控制器的一部分吗?就像我说的,这行得通,但让我很烦。

【问题讨论】:

【参考方案1】:

UIVIewController 有一个名为 UINavigationController 的属性。每个 UINavigationController 都有自己的内置工具栏。所以当你打电话时,

[[self navigationController] setToolbarHidden:NO];

您实际上启用了每个 UIViewController 附带的 navigationController 属性的工具栏。并且当您使用以下两行设置工具栏的项目和样式时:

[self setToolbarItems: myToolbarButtons];
[[[self navigationController] toolbar]setBarStyle:UIBarStyleBlack];

您实际上是在设置 UINavigationController 的内置工具栏的项目。

希望这会有所帮助。查看UIViewController Class Reference 了解更多信息。

【讨论】:

【参考方案2】:

在第 1 行中,您正在向工具栏的超级视图发送一条消息以隐藏它,这样做是因为超级视图可以在最佳时间进行它想要的任何调整大小/布局。

导航控制器从第 2 行中self 的变量中读取工具栏,因为导航控制器当前正在呈现self

在第 3 行,您正在访问工具栏本身,由navigationController 管理。这是工具栏的一部分,与自身相关而不是导航控制器,因此导航控制器不会公开修改它的方法,允许您直接访问工具栏然后对其进行修改。

通过这种方式,您可以在各个级别访问工具栏,从而使您自己更轻松。对于在第一行中,您不必管理显示它。在第二行和第三行中,您不必管理创建/销毁它。

【讨论】:

以上是关于将工具栏添加到导航视图控制器的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

修复导航的正确方法是啥?

如何将导航控制器添加到不是主视图的视图?

无法将自定义按钮添加到导航控制器的工具栏

目标 C:使用代码实现导航控制器时如何在 NIB 中添加工具栏

实现复杂的自定义视图控制器的正确方法是啥

xcode / storyboard:无法将栏按钮拖动到顶部的工具栏