0

次のセレクターにパラメーターを渡すにはどうすればよいですか?

   NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:)  keyEquivalent:@""];

行番号をメソッドに渡したいのですが。

ありがとう

編集

渡したい行は、最初に右クリックしたテーブルの行です。ただし、任意の整数変数にすることができます。

4

2 に答える 2

1

メニュー項目自体(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]

于 2013-03-20T18:15:58.003 に答える
1

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:)。

于 2013-03-20T18:35:10.007 に答える