2009-08-31 7 views
0

問題が発生しています。コンテキストメニューが表示されていますが、メニュー項目はアクティブになっていません。 ので、次のようにメニューを表示するための私の新しいコードは次のとおりです。次のようにコンテキストメニューがアクティブにならない

NSMenu *defMenu = [[[NSMenu alloc] initWithTitle:@"default Contextual Menu"] autorelease]; 

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile) keyEquivalent:@"" atIndex:0]; 

[defMenu insertItemWithTitle:@"Delete" action:@selector(deleteFile) keyEquivalent:@"" atIndex:1]; 

return defMenu; 

とDELETEFILEとのOpenFileの機能declaratonsは以下のとおりです。

-(int)openFile; 

-(int)deleteFile; 

と、次のように私は私のコンテキストメニューを呼び出しています:

私のコンテキストメニュー項目はすべて網かけであり、クリックすることはできません。私が間違っているところを教えてください。

ありがとうございました

+0

質問を削除したり、回答が返ってから別の質問に置き換えたりしないでください。検索によってサイトを見つけたユーザーは、古い質問とその回答を見つけることができません。別の質問をする場合は、別の質問をしてください。あなたが関連している場合、元の質問にリンクすることができます。ちょうど将来の参考のために。 – Chuck

答えて

1

openFile:メソッドは、パラメータとしてintをとります。 insertItemWithTitle:action:withObject:keyEquivalent:atIndex:オブジェクトを受け取るので、与えたセレクタにはオブジェクトも必要です。

あなたはオブジェクトとしてあなたのint型をラップするNSNumberを使用することができますし、単にintではなくNSNumberを取るためにあなたのopenFile:方法を変更します。そのような:

[defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0]; 

- (void)openFile:(NSNumber *)fileNumber { 
    int rowClicked = [fileNumber intValue]; 
    // Do whatever your old method did here 
} 

EDIT:は、あなたの更新の質問に答えるために:あなたのメニュー項目が無効になっている

理由はあなただけどのようなメソッド名を呼び出すためにそれらを言ったということです。アイテムのオブジェクトインスタンスを実際に呼び出す必要があるアイテムは教えてくれませんでした。これを修正するには、アイテムのターゲットを設定する必要があります。

NSMenuItem *openItem = [defMenu insertItemWithTitle:@"Open" action:@selector(openFile:) withObject:[NSNumber numberWithInt:5] keyEquivalent:@"" atIndex:0]; 
[openItem setTarget:self]; 

などのアイテムを設定する必要があります。

+0

返信いただきありがとうございます。実際にチャックの応答を見た後、私は彼らが何も引数を取らないように自分の関数を変更しました。しかし、今私は新しい問題を抱えています。すなわち、私のmenuitemsは活性化されていません。私は私の質問を修正しました。私がどこに間違っているのか教えてください。ありがとう – King

+1

私の答えはそれに対処するために更新されました。将来は、編集前に投稿された回答がやや無意味になるため、質問を編集してその意図を大幅に変えるべきではありません。元の質問に回答したが、関連のない問題が発生した場合は、別の質問をしてください。 –

+0

お返事ありがとうございました。 – King

1

このような動作は定義できません。アクションとは、アクションメッセージをトリガしたオブジェクトを表す1つのオブジェクト引数を取るメソッドです。コントローラ内で、基になるopenFile:メソッドを呼び出すアクションを作成する必要があります。

+0

お返事ありがとうございました。私は新しい問題を抱えています。すなわち、私のmenuitemsは活性化されていません。私は私の質問を修正しました。私がどこに間違っているのか教えてください。 ありがとう – King