プログラミングと音楽とアニメとiPhoneとiPadとMacとAndroidとLogicとギターとテニスと車

アプリ開発系の勉強メモやTipsなどを中心に他いろいろと書いていきます。

UIBarButtonItem に設定したボタン画像を切り替えて状態を維持する方法

ナビゲーションバーにオリジナルのボタン画像を配置して、そのボタンをタップしたら画像を別画像に切り替えたい場合に使えると思います。 

検証環境:iOS 7のiPhone4siPhone5s

実装例

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で指定した画像に直ぐに戻ってしまいます。他にもやり方があるかもしれませんが、自分的にはこの方法が一番簡単だと思います。