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のサブクラスをそれぞれ作る事で実現している。

コードは以下の通り、

MTLUserInterfaceValidationUpdate.zip