在iOS 6中,您可以访问Appearance API中的新方法:
- (void)setBackgroundImage:(UIImage *)backgroundImage
forState:(UIControlState)state
style:(UIBarButtonItemStyle)style
barMetrics:(UIBarMetrics)barMetrics
因此,您可以为每个导航按钮样式设置不同的背景。事实是,看起来它不适用于UIBarButtonSystemItemAdd
样式,但它可以说是UIBarButtonItemStyleDone
。这是我的代码片段:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0f)
{
// Works well
[barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button-done.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]
forState:UIControlStateNormal
style:UIBarButtonItemStyleDone
barMetrics:UIBarMetricsDefault];
// Not working
[barButton setBackgroundImage:[[UIImage imageNamed:@"nav-button-done.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]
forState:UIControlStateNormal
style:UIBarButtonSystemItemAdd
barMetrics:UIBarMetricsDefault];
}
任何人都知道它为什么不起作用?
答案 0 :(得分:2)
请注意UIBarButtonItem的方法声明:
- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state style:(UIBarButtonItemStyle)style barMetrics:(UIBarMetrics)barMetrics
问题是UIBarButtonSystemItemAdd不是有效的UIBarButtonItemStyle。支持的样式是:
typedef enum {
UIBarButtonItemStylePlain,
UIBarButtonItemStyleBordered,
UIBarButtonItemStyleDone,
} UIBarButtonItemStyle;
您将UIBarButtonItemStyle与UIBarButtonSystemItem混为一谈,它们实际上并不相同,它只是忽略您对其设置的值并恢复为默认类型。