次のセレクターにパラメーターを渡すにはどうすればよいですか?
NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:) keyEquivalent:@""];
行番号をメソッドに渡したいのですが。
ありがとう
編集
渡したい行は、最初に右クリックしたテーブルの行です。ただし、任意の整数変数にすることができます。
次のセレクターにパラメーターを渡すにはどうすればよいですか?
NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:) keyEquivalent:@""];
行番号をメソッドに渡したいのですが。
ありがとう
編集
渡したい行は、最初に右クリックしたテーブルの行です。ただし、任意の整数変数にすることができます。
メニュー項目自体(item3
スニペット)がメソッドに送信されるため、選択した特定のメニュー項目をその方法で識別できます。たとえば、NSMenuItemのtagプロパティを設定することもでき[item3 setTag:3]
ます。次に、uncheckrowメソッドで次を使用できます。NSInteger row = [sender tag];
編集:更新された質問の場合
このメソッドに任意の整数を送信したい場合は、オプションがありますが、それらは特にエレガントではありません。AppKitは常にNSMenuItemを送信者として送信するため、チェックを外しているNSMenuItemで整数を使用できるようにする必要があります。NSMenuItemは、メソッドを介して親NSMenuにアクセスできることに注意してくださいmenu
。したがって、親NSMenu自体に利用できるプロパティがある場合は、を使用できます[[sender menu] thatProperty]
。テーブルの行を右クリックしたときにNSMenuを表示しているので、メニューを表示する前にプロパティを設定できます。NSMenuをサブクラス化して、独自の「spawningRowIndex」プロパティを追加することをお勧めします(ただし、より適切な名前を選択してください)。NSMenuを表示する前にプロパティを設定し、uncheckrowを受け取ったらを使用できます[[sender menu] spawningRowIndex]
。
menuForEventをオーバーライドします:テーブルビューのサブクラスで、コントローラーで「rowToApply」と言う変数を取得します
- (NSMenu*) menuForEvent:(NSEvent*)event
{
NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];
NSInteger row = [self rowAtPoint:point];
BOOL clickWasOnItem = (row > -1);
if(clickWasOnItem) {
controller.rowToApply = [self itemAtRow:row];// Controller can be datasource(or) delegate (or) someObject which can be accessible)
}
return [super menuForEvent:event];
}
rowToApply:をcontextualMenuアイテムのアクションメソッドで使用できます(uncheckrow:)。