Interface Builder を介して多数のをサブクラス化NSMenu
し、接続しました。NSMenuItem
デバッガーでテストして、実際に初期化されることを確認しました。
メニューは項目を自動有効にしないように設定されています。それでも、NSMenuItem のいずれかを に設定すると、[myMenuItem setEnabled:NO]
引き続き有効になります。[self update]
NSMenu サブクラス内から呼び出しても。
私は何が欠けていますか?
Interface Builder を介して多数のをサブクラス化NSMenu
し、接続しました。NSMenuItem
デバッガーでテストして、実際に初期化されることを確認しました。
メニューは項目を自動有効にしないように設定されています。それでも、NSMenuItem のいずれかを に設定すると、[myMenuItem setEnabled:NO]
引き続き有効になります。[self update]
NSMenu サブクラス内から呼び出しても。
私は何が欠けていますか?
同僚の助けを借りて解決したので、同じ問題を経験した他の人のためにここに投稿します。
NSMenu-sublass をアイテムの自動有効化 (デフォルトの動作) に設定してから、このメソッドを NSMenu-sublass に実装する必要があります。
- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
return [menuItem isEnabled];
}
この問題は、サブクラス化せずに解決できます。
NSMenuItem
コントロールで無効にできる標準メニュー + いくつかのカスタム s のみが必要な場合は、次のことができます。
もう 1 つのメニュー ノードを追加します。サブメニュー メニュー項目をオブジェクト ライブラリからメニューにドラッグ アンド ドロップするだけです。
管理したいすべての NSMenuItems をこの新しい Menu ノードに追加します。
New Menu ノードの Attributes インスペクタを開き、Auto Enables Items オプションをオフにします。
メニューとアイテムのその他のオプションを構成します。
これで、次のようなコードを記述できます。
@property (weak) IBOutlet NSMenuItem *hidePlateMenuItem;
...
[self.hidePlateMenuItem setEnabled:NO];
そしてそれはうまくいくでしょう。
[myMenuItem setEnabled:NO]
別の場所から呼び出し て、メニューを含む nib がロードされた後に発生することを確認してください。たぶん、サブクラス化された NSMenu のawakeFromNib
.