如何设置所有可能状态的UIBarButtonItem背景图像?

时间:2013-09-23 20:21:27

标签: ios objective-c uinavigationbar uibarbuttonitem

现在我写这个是为了设置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];

我该如何干这个?

谢谢, 尼古拉斯

3 个答案:

答案 0 :(得分:1)

你无法在C中以任何特别方便的方式真正枚举enum的值;你能做的最好的事情就是将你关心的值粘贴到一个数组中并迭代它。

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];
}

答案 1 :(得分:1)

取自UIBarButtonItem docs:

  

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

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

答案 2 :(得分:0)

BarButtonItems将背景图像设置为“正常”状态,除非您专门为另一个状态设置图像,因此您可以编写

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

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

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