NSSegmentedControl をツールバーに置く

最近 Cocoa アプリケーションの世界で流行している(と、個人的に感じている)のが、Mac OS X 10.3 以降で使えるようになった NSSegmentedControl を使って「戻る/進む」ボタンを実現する方法だ。身近なところでは SafariTiger のシステム環境設定やヘルプビューアなど。私もコイツの見た目が好きなので、作ってみたくなった。…という訳で、数日前に帯広で Xcode と格闘していたのだった*1



実際にやってみて、気付いたことをメモしておく:

  • つるぺたやメタルのウインドウに配置すると、NSSegmentedControl もつるぺたになる。しかし、「小さいサイズ」に切り替えると、ぷっくり Aqua に戻ってしまう(上図)。仕様らしい(Small,Mini サイズでは、つるぺたスタイルの NSSegmentedControl は用意されていないようだ)。
  • ビュー・アイテムの場合は validateToolbarItem: を使って手軽に validation できないので、自分で NSToolbarItem のサブクラスを作って、validate メソッドをオーバーライドして使用可/不可状態を切り替えろ、とドキュメントに書いてある。見落としていて、ずいぶん回り道をしてしまった。そして自分で validate するのはやや面倒である。validate は頻繁に行われるから、無駄なコードを書かないようにとりわけ注意が必要だし。
  • 一日かかってようやくまともなツールバー項目に仕上げたが……NSSegmentedControl の外観は、たとえば Tiger Mail のツールバーみたいなデザインのアイコン群の中では浮いてしまうよなぁ……この点で不満の声が上がりそうな気もして、なんだか、普通のアイコンボタンにしといた方が良かったかなぁ、とか、イマイチ喜べないのだった*2

*1:図は開発中のものです。実際にリリースされるバージョンとは異なる場合があります。

*2:Mail.app のように、あのデザインで連結されたボタンを独自に用意するのは、さすがに面倒過ぎて割に合わない。