2011-02-02 13 views
6

インタフェースビルダーで作成されたいくつかの項目を持つメニューがあります。それはうまく見え、「有効」がチェックされています。
しかし、アプリケーションを実行すると、すべてのメニュー項目がグレー表示されます。メニュー項目は有効ですが、まだグレー表示されています

isEnabledをチェックしたところ、trueを返します。

また、プログラムで作成されたメニュー項目(initWithTitleおよびインターフェイスビルダーなし)は正常に機能します。

ここに何か不足していますか?私はOSXの開発に本当に新しいです(実際これは私の最初の一日です)。
<NSMenuValidation>をチェックアウト...

答えて

7

、 'アクション' メソッドは:(id)senderパラメータなしで宣言されました:

不思議
-(IBAction) quit; 

setAction方法はNSMenuItemでそれを食べて、文句を言っていませんでした。しかたがない。

+0

'quit'をアクションセレクタとして渡した場合、動作すると思います。 'quit:'を渡した場合、その理由があります: 'quit:'は、あなたが実装した 'quit'(' '')メソッドとは異なるメソッドです。 'quit'、' quit: '、' quit :: '、' quit:inAHuff: 'はすべて異なったセレクタです。 –

3

ああ、NSMenuを使用しての疫病

、ありがとうございました。

通常実装はのように簡単になります。これをGoogleと利益の可能性がある場合、誰かに

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem { 
    return [menuItem isEnabled]; 
} 
+0

ありがとう!いくつかの手抜きをして、私は自分自身の根本原因を追跡しましたが、有用な情報について+1しました。 –

+2

ターゲットがアクションに応答しない場合、これはメニューアイテムを満足させるとは思わない。 –

10

は、あなたのメニュー項目の目標を設定することを忘れないでください:

menuItem.target = self; 
  • をメニュー項目の目標が設定されている場合、そのオブジェクトは、アイテムのアクションメソッドを実装している場合、その後、NSMenu最初のチェックを参照してください。そうでない場合、項目は無効になります。ターゲットがアイテムのアクションメソッドを実装している場合、NSMenuは最初にそのオブジェクトがvalidateMenuItem:またはvalidateUserInterfaceItem:メソッドを実装しているかどうかをチェックします。表示されていない場合は、メニュー項目が有効になります。そうである場合、メニュー項目の有効な状態は、メソッドの戻り値によって決定されます。

  • メニュー項目のターゲットが設定されておらず、NSMenuオブジェクトがコンテキストメニューでない場合、NSMenuはレスポンダチェーンを使用してターゲットを決定します。アイテムのアクションを実装するレスポンダチェーンにオブジェクトがない場合、アイテムは無効になります

https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html

+2

ありがとう、いいヒント! – Morkrom

+0

ターゲットは最初のレスポンダ(メニュー項目からファーストレスポンダプロキシオブジェクトにドラッグするコントロールによってIBで設定されます)です。アクションは現在、レスポンダチェーン内にあると考えられるビューコントローラ内にあります。まだ灰色がかった。何か案は? – wcochran

関連する問題