如何将参数传递给以下选择器?
NSMenuItem *item3 = [[NSMenuItem alloc] initWithTitle:title3 action:@selector(uncheckrow:) keyEquivalent:@""];
我想将行号传递给方法。
由于
修改
我要传递的行是我在第一时间右键单击的表格行。但它可以是任何整数变量..
答案 0 :(得分:1)
菜单项本身(item3
您的代码段)将被发送到该方法,因此您可以通过该方式识别特定的所选菜单项。您还可以设置NSMenuItem的标记属性,例如:[item3 setTag:3]
,然后在您的uncheckrow方法中,您可以使用NSInteger row = [sender tag];
编辑:有关更新的问题
如果你想向这个方法发送一个任意整数,那么就有选项,但它们并不是特别优雅。 AppKit将始终将NSMenuItem作为发送方发送,因此您需要使未选中的NSMenuItem可用整数。请注意,NSMenuItems可以通过menu
方法访问其父NSMenus。因此,如果父NSMenu本身具有某些属性,您可以使用[[sender menu] thatProperty]
。由于您在响应右键单击表格行时显示NSMenu,因此您可以在显示菜单之前设置属性。我建议继承子类NSMenu来添加你自己的" spawningRowIndex"财产(尽管选择一个更好的名字)。在显示NSMenu之前设置属性,当您收到uncheckrow时,可以使用[[sender menu] spawningRowIndex]
。
答案 1 :(得分:1)
覆盖menuForEvent:在tableview的子类中,在控制器中取一些变量,然后说'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];
}
你可以在contextualMenu项目的动作方法中使用rowToApply :( uncheckrow :)。