c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

UIToolbarのUIBarButtonItemをさしかえる方法

小ネタですが。たとえばEditボタンをおしたら、DONEボタンとかにさしかえたいじゃん?
Flexとかだとかるくbutton.text = "DONE";とかで一行でおわるんだけどねえ。

{ [OK] <---> [Edit] [+] } 

というUIToolBarがあるとして、話を進める。
換えたいのは左から3番目のEdit。
(二番目はFlexible Space)

UIBarButtonItem *tmpButton  = [[itemListToolbar items] objectAtIndex:2];
tmpButton.title = @"DONE";

結構ややこしいでしょ?…な〜んてこんな簡単に書けるわけがねえな!

//ToolBarに登録されているアイテムのidが入ったNSArrayをうけとり(COPY)、
//NSMutableArrayを生成している。これはNSArrayがものすごく低機能な為。
NSMutableArray *tmpItemListToolbarButtons = [[NSMutableArray alloc] initWithArray:[itemListToolbar items]];
//新しくUIBarbuttonItemのインスタンスを作る
UIBarButtonItem *tmpButton  = [[UIBarButtonItem alloc] initWithTitle:@"DONE" target:nil action:nil];
//配列の左から三番目のオブジェクトを差し替える
[tmpItemListToolbarButtons replaceObjectAtIndex:2 withObject:tmpButton];
//こうして出来たToolBar itemsを再度ToolBarに代入してやる
[itemListToolbar setItems:tmpItemListToolbarButtons animated:YES];

めんどくせえええ!!
ホントにこんな書き方しなきゃいけないの?なんか俺間違えてるんかなあ…。とおもってしまう…。