UIBarButtonItem に設定したボタン画像を切り替えて状態を維持する方法
ナビゲーションバーにオリジナルのボタン画像を配置して、そのボタンをタップしたら画像を別画像に切り替えたい場合に使えると思います。
実装例
viewDidLoad とかで以下のように UIBarButtonItem を設定します。
UIButton *imgBt = [UIButton buttonWithType:UIButtonTypeCustom];
imgBt.frame = CGRectMake(0, 0, 44.0f, 44.0f);
[imgBt addTarget:self
action:@selector(btAction:) forControlEvents:UIControlEventTouchUpInside];
[imgBt setImage:[UIImage imageNamed:@"bt_image_normal"]
forState:UIControlStateNormal];
[imgBt setImage:[UIImage imageNamed:@"bt_image_selected"]
forState:UIControlStateSelected];
UIBarButtonItem *barItem = [[UIBarButtonItem alloc] initWithCustomView:imgBt];
self.navigationItem.rightBarButtonItem = barItem;
- (void)btAction:(id)sender
{
UIButton *bt = (UIButton*)sender;
if (bt.selected){
bt.selected = NO;
}else
bt.selected = YES;
}
ポイントは、UIButtonのsetImage:forState:でUIControlStateSelectedを指定することです。UIControlStateHighlightedではタップして指を離すとUIControlStateNormalで指定した画像に直ぐに戻ってしまいます。他にもやり方があるかもしれませんが、自分的にはこの方法が一番簡単だと思います。