Cocoa のメニューには NSMenuItemValidation プロトコルというメニュー項目の有効・無効を動的に切り替えられる機構がある。ある NSMenuItem
の target
に設定されたオブジェクトが -(BOOL)validateMenuItem:(NSMenuItem *)
を実装しているとき、このメニューアイテムが表示される直前に、メニューアイテム自身を引数としてこのメソッドが呼ばれる。メソッドが真を返せばメニューアイテムが有効になり、偽を返せば無効になる。
ところが、 Interface Builder でメニューアイテムに binding を設定すると -validateMenuItem:
が呼ばれなくなるようだ。そのようなメニューアイテムの有効・無効を切り替えるには binding またはコードで enabled
プロパティを操作すればよい。ただし、そのメニューアイテムを含むメニューの autoenablesItems
が真ならば、メニューアイテムの enabled
にセットした値が上書きされるかもしれないことに注意。