ツールバーにカスタムボタンを置く - CustomButton at Toolbar -

ツールバーのボタン

ツールバーに置くボタンはUIBarButtonItemインスタンスである。
UIBarButtonItemは画像で初期化したり、

UIBarButtonItem *catalogButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"icon_book.png"]
										      style:UIBarButtonItemStylePlain
										     target:self
										     action:@selector(catalogButtonPressed)];

システムボタンを使ってみたり

UIBarButtonItem *myBookmarks = [[UIBarButtonItem alloc]
  initWithBarButtonSystemItem:UIBarButtonSystemItemBookBarks
                       target:self
                       action:@selector(mySelector)];

することができる。
でも、initWithImageを使って生成したボタンは白黒画像になってしまう。これは悲しい。
ということで色つき画像をボタンに設定してツールバーに置く方法。

カスタムボタン

これを解決するにはカスタムボタンを使えばいい。カスタムボタンで画像を設定して作ったボタンはツールバーに置いても白黒画像にならないらしい。
こちらのブログを参考にして書いたコードが以下。

UIButton *catalogUIButton = [UIButton buttonWithType:UIButtonTypeCustom];
[catalogUIButton setImage:[UIImage imageNamed:@"icon_glass.png"] forState:UIControlStateNormal];
[catalogUIButton addTarget:self action:@selector(catalogButtonPressed) forControlEvents:UIControlEventTouchUpInside];
[catalogUIButton setShowsTouchWhenHighlighted:YES];
catalogUIButton.frame = CGRectMake(0, 0, 40, 40);
[catalogUIButton setAdjustsImageWhenHighlighted:YES];
UIBarButtonItem *catalogButton = [[[UIBarButtonItem alloc] initWithCustomView:catalogUIButton] autorelease];

で、できたツールバーがこんな感じ。

良いです。
ちなみに残念ですがこうして作ったボタンにはsetTitleを使ってもタイトルが付きませんでした。何でだ!?
仕方ないから、UILabelを使ってタイトルもどきを設置します。