2013-03-20 25 views
0

如何将参数传递给以下选择器?将参数传递给上下文菜单的选择器方法

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

我想传递该方法的行数。

感谢

编辑

我想通过该行是我摆在首位的RightClicked表的行。但它可以是任何整型变量..

+0

你想要传递哪一行,这个菜单项设置的上下文是什么,即它是用于mainmenu还是上下文菜单? – nkongara 2013-03-20 18:19:57

+0

我更新了第一篇文章。谢谢 – sharkyenergy 2013-03-20 18:24:05

回答

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]; 
} 

可以使用rowToApply:在contextualMenu项的操作方法(uncheckrow :)。

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设置属性并收到取消清除之前,您可以使用[[sender menu] spawningRowIndex]

+0

谢谢!我要发送的行不是所选菜单的行,而是用户右键单击的行显示菜单。对不起,如果我没有指定这一点。 – sharkyenergy 2013-03-20 18:16:57

+1

@Justme好的我已经更新了我的答案,试图帮助编辑的问题。恐怕我不知道一种优雅的方式来获取右键单击表格行的索引,但我可以建议一些不太优雅的方法来完成。 – 2013-03-20 18:37:52

+0

谢谢,但其他答案更优雅..但无论如何谢谢你! upvoted你的答案! – sharkyenergy 2013-03-20 19:05:43