23

Interface Builder を介して多数のをサブクラス化NSMenuし、接続しました。NSMenuItemデバッガーでテストして、実際に初期化されることを確認しました。

メニューは項目を自動有効にしないように設定されています。それでも、NSMenuItem のいずれかを に設定すると、[myMenuItem setEnabled:NO]引き続き有効になります。[self update]NSMenu サブクラス内から呼び出しても。

私は何が欠けていますか?

4

8 に答える 8

12

同僚の助けを借りて解決したので、同じ問題を経験した他の人のためにここに投稿します。

NSMenu-sublass をアイテムの自動有効化 (デフォルトの動作) に設定してから、このメソッドを NSMenu-sublass に実装する必要があります。

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem {
    return [menuItem isEnabled];
}
于 2012-02-23T22:51:37.153 に答える
11

ここに画像の説明を入力

最も近い親 NSMenuの Auto Enables Itemsのチェックを外す必要があります

于 2017-03-05T20:37:45.953 に答える
7

この問題は、サブクラス化せずに解決できます。

NSMenuItemコントロールで無効にできる標準メニュー + いくつかのカスタム s のみが必要な場合は、次のことができます。

  1. もう 1 つのメニュー ノードを追加します。サブメニュー メニュー項目をオブジェクト ライブラリからメニューにドラッグ アンド ドロップするだけです。

  2. 管理したいすべての NSMenuItems をこの新しい Menu ノードに追加します。

  3. New Menu ノードの Attributes インスペクタを開き、Auto Enables Items オプションをオフにします。

    自動有効化アイテム

  4. メニューとアイテムのその他のオプションを構成します。

これで、次のようなコードを記述できます。

@property (weak) IBOutlet NSMenuItem *hidePlateMenuItem;
...
[self.hidePlateMenuItem setEnabled:NO];

そしてそれはうまくいくでしょう。

于 2013-02-20T10:01:28.000 に答える
0

[myMenuItem setEnabled:NO]別の場所から呼び出し て、メニューを含む nib がロードされた後に発生することを確認してください。たぶん、サブクラス化された NSMenu のawakeFromNib.

于 2012-02-21T00:55:00.530 に答える