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

时间:2011-10-18 15:33:05

标签: iphone ios cocoa-touch uinavigationcontroller uitoolbar

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

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

这很好用,实际上修复了从我将工具栏添加到导航视图的子视图时的错误内存访问。但我不明白在工具栏可见后我怎么能做“self setToolbarItems”。它会成为viewcontroller的一部分吗?就像我说的那样,这有效但却让我烦恼。

2 个答案:

答案 0 :(得分:1)

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

[[self navigationController] setToolbarHidden:NO];

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

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

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

希望这会有所帮助。有关详细信息,请查看UIViewController Class Reference

答案 1 :(得分:0)

在第1行中,您向工具栏的超级视图发送消息以隐藏它,这是以这种方式完成的,因为超级视图可以在最佳时间执行任何调整大小/布局。

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

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

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