0

如何将参数传递给以下选择器?

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

我想将行号传递给该方法。

谢谢

编辑

我要传递的行是我首先右键单击的表的行。但它可以是任何整数变量..

4

2 回答 2

1

Override the menuForEvent: in your tableview's subclass, Take some variable in your controller say '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];
}

you can use the rowToApply: in contextualMenu item's action method (uncheckrow:).

于 2013-03-20T18:35:10.007 回答
1

菜单项本身(item3您的代码片段)将被发送到该方法,因此您可以通过这种方式识别特定的选定菜单项。您还可以设置 NSMenuItem 的 tag 属性,例如:[item3 setTag:3]然后在您的 uncheckrow 方法中,您可以使用NSInteger row = [sender tag];

编辑:对于更新的问题

如果您想向此方法发送任意整数,则有一些选项,但它们并不是特别优雅。AppKit 将始终将 NSMenuItem 作为发送者发送,因此您需要使整数可用于未选中的 NSMenuItem。menu请注意,NSMenuItems 可以通过该方法访问其父 NSMenus 。因此,如果父 NSMenu 本身具有您可以利用的某些属性,则可以使用[[sender menu] thatProperty]. 由于您正在显示 NSMenu 以响应右键单击表格的行,因此您可以在显示菜单之前设置属性。我建议继承 NSMenu 以添加您自己的“spawningRowIndex”属性(尽管选择更好的名称)。在显示 NSMenu 设置属性之前,当您收到 uncheckrow 时,您可以使用[[sender menu] spawningRowIndex].

于 2013-03-20T18:15:58.003 回答