2013-02-25 88 views
8

我在這裏有一個NSMenu非常非常奇怪的問題。NSMenuItem,自定義視圖和mouseUp的奇怪問題:

大約有一半的NSMenuItems通過NSMenuItem上的setView:方法對它們使用自定義視圖。在這個自定義視圖中,我已經實現了mouseUp:當用戶點擊菜單項時捕獲,並且這在我第一次打開菜單時完全起作用。

雖然第二次,如果我點擊時按住鼠標穩定,mouseUp不會在任何這些菜單項上被調用。但是,如果我點擊,然後稍微移動光標,並釋放mouseUp被調用。因此,出於某種原因,某些事件正在攔截這些事件,但僅在菜單第二次出現時纔會發生,並且如果光標在mouseDown事件之後移動,則會通過該事件。 (出於某種原因,mouseDown永遠不會被調用,在菜單的第一次或第二次出現時)。

有人有什麼線索可以在這裏發生什麼?什麼是攔截我的鼠標事件,爲什麼它們會在菜單的第一次出現時通過我的自定義視圖,而不是第二次?

+0

同樣經歷,如果我雙擊(然後在菜單的第二個外觀上調用mouseUp兩次)。 – 2013-02-25 20:09:17

+0

所以我必須在這個視圖頂部的NSTextViews。那些正在獲得mouseDown,但他們也在他們的超級視圖的同時開始失敗。這幾乎就像NSMenu攔截鼠標事件的頂部。 – 2013-02-25 21:42:13

回答

3

我有同樣的問題。原來的問題是我在第一次菜單點擊後啓動了一個外部應用程序,並且當菜單再次打開時,它的窗口不再是關鍵。添加此方法的一個NSView子類I'n使用菜單項內解決了這一問題:

- (void)viewWillMoveToWindow:(NSWindow *)newWindow; 
{ 
    [super viewWillMoveToWindow:newWindow]; 

    if (newWindow != nil && ![newWindow isKeyWindow]) 
     [newWindow becomeKeyWindow]; 

    [self updateTrackingAreas]; 
} 

更多情況下,看看這個鏈接:http://openradar.appspot.com/7128269