2011-12-22 73 views
2

我有一個奇怪的問題,我點擊離開我的窗口。它辭去了主要和關鍵。然後我再次點擊它,並且點擊的視圖不響應鼠標點擊。但第二次點擊確實會導致視圖作出迴應。就好像在第一次點擊時那樣,窗口不是關鍵,點擊使它變成了關鍵,並且能夠處理第二次點擊。可可NSApplication不活躍,但接收鼠標事件

我分類NSApplication並攔截sendEvent:以查看我的應用程序在第一次點擊事件期間是否獲取了事件並且確實如此。此外,我甩掉了響應者鏈,並且看到我的觀點確實存在於鏈條中,但直到第二次點擊時,窗口才成爲關鍵。我還注意到,當我收到第一個點擊事件時,應用程序甚至沒有活動。這怎麼可能?不是應用程序在接收到鼠標事件時應該激活嗎?雞/蛋...

任何想法/ sugggestions?

更新:通過文檔讀取後,我發現這樣的:當用戶按下鼠標按鈕時光標在一個視圖對象

鼠標按下事件被髮送。如果包含視圖的窗口不是關鍵窗口,則該窗口將成爲關鍵窗口並放棄鼠標向下事件。但是,視圖可以通過覆蓋NSView的accepFirstMouse:方法來返回YES來繞過此默認行爲。

因此,這似乎是發生了什麼事情。但是,我試圖覆蓋acceptsFirstMouse:acceptsFirstResponder但無濟於事。我的觀點仍然不是「接受第一隻老鼠」。

謝謝!

+0

順便說一句,我的應用策略是NSApplicationActivationPolicyAccessory .. – 2011-12-22 14:40:19

+0

此外,preventWindowOrdering不會被調用..不過..挖你 – 2011-12-22 14:42:43

+0

應用的「被激活」的行爲可能是由你的子類重寫,也許你錯過了調用' [超級的東西];'某處? – 2011-12-22 19:42:49

回答

0

10.10>在您的應用程序委託中 - 您可以掛鉤鼠標事件,然後強制窗口變爲活動狀態。

- (void)applicationDidUpdate:(NSNotification *)notification { 
    NSLog(@"did update"); 
    // [[NSApp mainWindow] makeKeyWindow];doesn't work. not sure why. 
    [[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; 
} 

- (void)applicationDidResignActive:(NSNotification *)notification { 
    // your window lost focus here 
} 

- (void)applicationDidBecomeActive:(NSNotification *)notification { 
    // 
}