2013-03-28 41 views
0

要顯示上NSOutlineView的右鍵快捷菜單,你必須繼承它並重寫:NSOutlineView如何上下文菜單連接到委託

- (NSMenu *)menuForEvent:(NSEvent *)theEvent { 
    NSPoint pt = [self convertPoint:[theEvent locationInWindow] fromView:nil]; 
    id item = [self itemAtRow: [self rowAtPoint:pt]]; 

    // Only the delegate knows how to create a menu based on the item 
    return [self createMenuFor: item]; 
} 

那麼,什麼是正確的方式來獲得委託創建這裏的菜單和處理菜單操作?

編輯 - 所以子類不知道如何創建菜單,所以我只是這樣做。可以嗎?我只是沒有看到如何在線與代表進行溝通的示例代碼。

return [[self delegate] createMenuForItem:item]; 

明顯地在我的大綱視圖委託中定義了一個方法來返回一個NSMenu。

回答

1

首先,除([theEvent type] == NSRightMouseDown)以外的任何事件,您都應該打電話給super。我不確定這是你的問題,但它是一個開始的好地方。

其次,這不是委託方法,所以它與連接任何委託無關。你可以放心地忽略這一點。

第三,你肯定你設置了大綱視圖中的類名來,你的子類在Interface Builder或者(如果你在代碼中創建它)(在其中實現上述子類)的指定新代碼中的子類?

+0

好吧,現在我已經在IB中正確設置了大綱視圖類到我的新子類。但問題是這個新的子類不知道如何創建菜單。我只創建它,因爲我被迫爲了顯示一個菜單。我正在用我的意思編輯這個問題。 – Mark

+1

除了'NSRightMouseDown'之外,您還需要使用'NSControlKeyMask'修飾符標誌來查找'NSLeftMouseDown' ... – NSGod

+0

當然 - 菜單可以來自任何地方。它甚至可以來自超級,並在交還之前進行修改。 –