1

UIImageをハイライト表示すると変更しようとしています。 UIButtonUINavigationControllerにあります。UINavigationBarでUIButtonの強調表示されたイメージを変更します。

私は次のコードを持っている:

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 "]'で十分です。 –

答えて

2

タッチダウンイベントでUIButtonインスタンスが強調表示または選択されていないようです。これはおそらくUIBarButtonItemインスタンスが通常のボタンのように動作しないためです。実際には、UIButton subclassesでさえありません。

回避策があります。

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

pressDown:pressUp:では、あなたがpressUp:についても同様

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

とを設定することができます:あなたは、インスタンス変数にごUIButtonへの参照を保持する場合は、ボタンの画像を変更するためにコードを追加することができます。

+0

これは動作しますが、新しい画像の上に黒色の輝きが表示されます。どのようにしてデフォルトのUIBarButtonItem黒色の輝きを止めることができますか? –

+0

私はあなたができることを確信していません - グローは 'UIBarButtonItem'の一部であり、おそらく設定できません。 –

関連する問題