2011-08-20 58 views
5

所有, 所以我有NSBox一個子類,並在它的子視圖就像一個標籤和兩個imageViews。我已經覆蓋了menuForEvent:。然而,當我點擊NSBox來選擇它,然後點擊Control +點擊它的任何子視圖,那麼menuForEvent:永遠不會被調用。控制+點擊不觸發menuForEvent

我不明白爲什麼會這樣。

+0

我在桌子上有同樣的東西...會讓你知道我找到了什麼。 –

回答

1

您需要實現menuForEvent:在子視圖也和將事件轉發到你的上海華盈的(NSBox子類)實現menuForEvent的:

- (NSMenu *)menuForEvent:(NSEvent *)event 
{ 
    return [[self superview] menuForEvent:event]; 
} 

我以爲,它會自動通過掉落到上海華而不需要子類化子視圖。我發現右鍵單擊確實如此,但由於某種原因,控制單擊不能。

+0

這實際上無痛解決了這個問題,謝謝! – duncanwilcox

4

有一個在如何控制點擊和右擊通過的NSView處理的差(如jfewtr指出)。上下文菜單將出現,如果點擊落在子視圖中,而不是爲控制單擊一個右鍵單擊

我感到意外,實際上寫了一個關於它的帖子有更多的細節在這裏:NSView control-click quirks

有幾個可能的解決方案,但首要/自定義你的整個子視圖樹可能不是最好的選擇。我已經找到了最好的解決了這是在您的頂級視圖(您NSBox子類)明確顯示您的上下文菜單的控制點擊:

- (void)mouseDown:(NSEvent *)theEvent 
{ 
    if (theEvent.modifierFlags & NSControlKeyMask) 
    { 
     [NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self]; 
    } 
} 

雖然不是很大的硬編碼這樣的行爲,避免操縱或遍歷整個子視圖樹,這會導致更多有問題的副作用/錯誤。