如何将参数传递给以下选择器?
NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:) keyEquivalent:@""];
我想将行号传递给该方法。
谢谢
编辑
我要传递的行是我首先右键单击的表的行。但它可以是任何整数变量..
如何将参数传递给以下选择器?
NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:) keyEquivalent:@""];
我想将行号传递给该方法。
谢谢
编辑
我要传递的行是我首先右键单击的表的行。但它可以是任何整数变量..
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:).
菜单项本身(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]
.