validateuserinterfaceitem(8)
NSUserInterfaceValidationsプロトコルは、CocoaのUIの状態を更新する仕組みを提供するプロトコルだ。
UIにはNSToolbar、NSMenu、NSView、NSControlのサブクラス群が含まれる。
メニューのenable/disableやチェックマークを付ける等の状態を更新する、OpenStep時代のNSMenuActionResponder非公式プロトコルを発展させた物だと思われる。
NSUserInterfaceValidationsプロトコルは、NSToolbar用のNSToolbarItemValidationプロトコルや、NSMenu用のNSMenuValidationプロトコルを統一的に扱う為の物なのだろう。
ここで問題なのは、NSToolbarやNSMenuにはautovalidates等のプロパティがあり、自動で更新処理を行う事が出来る。
しかし、NSViewやNSControlには自動で更新を行う仕組みは無い。
当初、私は個々のNSControlのサブクラスで、”NSWindowDidUpdateNotification”をとらえて更新させるコードを書いていた。
この方式の欠点はNibエディター上でUIを配置する毎に、Class名を書き換える必要があり煩雑である事だった。
この欠点を解消する為に、Notificationを個々のcontrolでとらえるのではなく、NSWindowのupdateメソッドをオーバーライドして、個々のcontrolの状態を更新する方法に変更した。
NSWindowとNSPanelのサブクラスをそれぞれ作る事で実現している。
コードは以下の通り、