0

现在我正在写这个来设置 UIBarButtonItem 的背景图像:

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];

我怎样才能把它弄干?

谢谢,尼古拉斯

4

3 回答 3

1

在 C 语言中,您无法enum以任何特别方便的方式真正枚举 a 的值。您能做的最好的事情就是将您关心的值粘贴到一个数组中并对其进行迭代。

NSUInteger controlStates[] = {UIControlStateNormal, UIControlStateHighlighted, UIControlStateSelected, UIControlStateDisabled};
NSUInteger numControlStates = 4;
for( NSUInteger i = 0; i < numControlStates; i++ ){
    [[UIBarButtonItem appearance] setBackgroundImage:image 
                                            forState:controlStates[i]
                                          barMetrics:UIBarMetricsDefault];
}
于 2013-09-23T20:32:26.527 回答
1

取自 UIBarButtonItem 文档:

通常,您应该为正常状态指定一个值,以供其他没有自定义值集的状态使用。类似地,当属性依赖于条形度量(在 iPhone 上,横向条形的高度与标准不同)时,您应该指定 UIBarMetricsDefault 的值。

基本上,您只需要设置 UIControlStateNormal 的值,除非您为其他人设置自定义值。如果您没有设置自定义值,它们将默认为您为 UIControlStateNormal 设置的值。

于 2013-09-23T20:34:33.757 回答
0

BarButtonItems 使用为正常状态设置的背景图像,除非您专门将图像设置为另一种状态,这样您就可以编写

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];

如果您想更明确,您也可以将所有状态组合在一起(它们是按位标志)

[[UIBarButtonItem appearance] setBackgroundImage:image forState:UIControlStateNormal | UIControlStateHighlighted | UIControlStateSelected | UIControlStateDisabled barMetrics:UIBarMetricsDefault];
于 2013-09-23T20:32:05.507 回答