1

突出显示的图像我想在UIButton改变UIImage,突显了。 UIButton位于UINavigationController变化的UIButton在UINavigationBar的

我有以下代码:

UIView *containingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 28, 28)]; 
UIButton *barUIButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[barUIButton setImage:[UIImage imageNamed:@"Add.png"] forState:UIControlStateNormal]; 
barUIButton.imageView.contentMode = UIViewContentModeScaleAspectFit; 
barUIButton.frame = CGRectMake(-9, 0, 28, 28); 
[barUIButton addTarget:self action:@selector(addButtonPressed:) forControlEvents:UIControlEventTouchUpInside]; 
[barUIButton setImage:[UIImage imageNamed:@"AddHighlighted.png"] forState:UIControlStateSelected | UIControlStateHighlighted]; 
[containingView addSubview:barUIButton]; 
UIBarButtonItem *containingBarButton = [[[UIBarButtonItem alloc] initWithCustomView:containingView] autorelease]; 
self.navigationItem.rightBarButtonItem = containingBarButton; 

取而代之的是新的图像表现突出的时候,还有就是现有图像周围的黑色阴影。

这是为什么?

+0

使用'png'文件和'imageNamed:'时,您不必指定文件扩展名。 '[UIImage imageNamed:@“Add”]'就足够了。 – 2012-03-06 00:14:00

回答

2

它看起来像UIButton实例没有得到突出显示或触摸按下事件选择。这可能是因为UIBarButtonItem实例不像普通按钮那样操作;事实上,他们甚至没有UIButton subclasses

有一种解决方法。如果你保持在一个实例变量您UIButton一个参考,你可以添加代码更改按钮的图像:

[barUIButton addTarget:self action:@selector(pressDown:) forControlEvents:UIControlEventTouchDown]; 
[barUIButton addTarget:self action:@selector(pressUp:) forControlEvents:UIControlEventTouchUp]; 

pressDown:pressUp:,您可以设置

-(void)pressDown:(id)sender 
{ 
    [barUIButton setImage:[UIImage imageNamed:@"Add.png"] forState:UIControlStateNormal]; 
} 

,类似的还有pressUp:

+0

虽然在新图像上出现黑色光芒,但它可以正常工作。我怎样才能停止默认的UIBarButtonItem黑色发光? – 2012-03-06 14:43:59

+0

我不确定你能够 - 发光是'UIBarButtonItem'的一部分,可能无法配置。 – 2012-03-06 15:30:30