2013-03-20 69 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