所有, 所以我有NSBox
一個子類,並在它的子視圖就像一個標籤和兩個imageViews。我已經覆蓋了menuForEvent:
。然而,當我點擊NSBox
來選擇它,然後點擊Control +點擊它的任何子視圖,那麼menuForEvent:
永遠不會被調用。控制+點擊不觸發menuForEvent
我不明白爲什麼會這樣。
所有, 所以我有NSBox
一個子類,並在它的子視圖就像一個標籤和兩個imageViews。我已經覆蓋了menuForEvent:
。然而,當我點擊NSBox
來選擇它,然後點擊Control +點擊它的任何子視圖,那麼menuForEvent:
永遠不會被調用。控制+點擊不觸發menuForEvent
我不明白爲什麼會這樣。
您需要實現menuForEvent:在子視圖也和將事件轉發到你的上海華盈的(NSBox子類)實現menuForEvent的:
- (NSMenu *)menuForEvent:(NSEvent *)event
{
return [[self superview] menuForEvent:event];
}
我以爲,它會自動通過掉落到上海華而不需要子類化子視圖。我發現右鍵單擊確實如此,但由於某種原因,控制單擊不能。
這實際上無痛解決了這個問題,謝謝! – duncanwilcox
有一個在如何控制點擊和右擊通過的NSView處理的差(如jfewtr指出)。上下文菜單將出現,如果點擊落在子視圖中,而不是爲控制單擊一個右鍵單擊。
我感到意外,實際上寫了一個關於它的帖子有更多的細節在這裏:NSView control-click quirks
有幾個可能的解決方案,但首要/自定義你的整個子視圖樹可能不是最好的選擇。我已經找到了最好的解決了這是在您的頂級視圖(您NSBox子類)明確顯示您的上下文菜單的控制點擊:
- (void)mouseDown:(NSEvent *)theEvent
{
if (theEvent.modifierFlags & NSControlKeyMask)
{
[NSMenu popUpContextMenu:[self menuForEvent:theEvent] withEvent:theEvent forView:self];
}
}
雖然不是很大的硬編碼這樣的行爲,避免操縱或遍歷整個子視圖樹,這會導致更多有問題的副作用/錯誤。
我在桌子上有同樣的東西...會讓你知道我找到了什麼。 –