我正在编写仅适用于iOS5设备的应用程序,因此我试图最大程度地利用新的appearance API。

我可以使用以下方法更改UIToolbar的背景:

[[UIToolbar appearance] setBackgroundImage:<myImage> forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

一切正常,但我正在寻找更多的自定义功能,因此我想知道UIToolbarPosition的用法,但遇到了一些问题。使用InterfaceBuilder或以编程方式添加UIToolbar,我将其放置在主视图的顶部-因此,我期望将UIToolbarPosition设置为UIToolbarPositionTop,但是从我测试的结果来看,它无法自动运行,也找不到任何API允许我设置UIToolbarPosition(是的,我已经用谷歌搜索过)。

所以-主要问题-如何创建UIToolbar并正确对其进行标记,因此它只能响应UIToolbarPositionTopUIToolbarPositionBottom,因此我可以使用:
[[UIToolbar appearance] setBackgroundImage:<myImage_1> forToolbarPosition:UIToolbarPositionTop barMetrics:UIBarMetricsDefault];

[[UIToolbar appearance] setBackgroundImage:<myImage_2> forToolbarPosition:UIToolbarPositionBottom barMetrics:UIBarMetricsDefault];

编辑:,根据要求提供更多详细信息。

我的应用程序中有多个工具栏-例如,在2个屏幕上位于屏幕顶部的工具栏,充当键盘附件视图的工具栏和在模态屏幕底部的2个工具栏。我想最大程度地利用新外观API,而不是在每个屏幕上自定义工具栏,因此我想了解整个UIToolbarPosition以及如何使用它。

我知道我可以通过分别自定义每个UIToolbar来实现我想要的功能,但是我只是对新的API和UIToolbarPosition用法感到好奇。

最佳答案

UIToolbarPostion不是您应该通过编程设置的属性-而是,它使您可以告诉程序当工具栏处于不同位置时如何处理该工具栏。这主要用于因屏幕变化(自动旋转)而被推入的工具栏,或位于内容可变的导航控制器之类的工具栏上。

话虽如此,如果您想直接访问工具栏以便可以使用它们/设置属性/等,则有两种方法。听起来您知道什么是标记,这是一种有效的方法-只需在工具栏中为IB或以编程方式为工具栏添加一个标记(在IB的侧栏中编辑tag属性,或者在声明工具栏时使用.tag属性即可)。然后,您可以使用viewWithTag方法访问您的工具栏。但是,更好的方法是通过从工具栏拖动到标题文件,仅为工具栏创建IB属性(与标签或按钮相同)。然后,您可以编写[nameOfToolbarProperty doSomeMethod]。如果您使用代码创建工具栏,则只需以相同的方式对其进行引用,例如
UIToolbar *tref = [/*toolbar creation code*/];
总之,您的代码

[[UIToolbar appearance] setBackgroundImage:<myImage_1> forToolbarPosition:UIToolbarPositionTop barMetrics:UIBarMetricsDefault];

可以通过添加使其工作
//Connect this to your toolbar in Interface Builder
@property (weak, nonatomic) IBOutlet UIToolbar *tref;

到您的标题。然后就做
 [tref setBackgroundImage:<myImage_1> forToolbarPosition:UIToolbarPositionTop barMetrics:UIBarMetricsDefault];

请注意,这只是告诉程序如果工具栏位于顶部位置,则显示什么图像-它不会设置工具栏的位置。 UIToolbarPosition是一个常量(因此您无法设置它)。

08-25 23:58