2012-05-06 78 views
1

如何確定子窗口是否由用戶直接移動,而不是由於其父窗口被移動?確定子窗口是由用戶移動還是由於父窗口移動?

我在這兩種情況下都會收到NSWindowDidMoveNotification通知。

我想我可以在NSWindowWillMoveNotification處理程序中測試父框架的原點,並將其與NSWindowDidMoveNotification處理程序中的原點進行比較,但是有沒有更好的方法?

這是我目前的解決方案:

- (void)windowWillMove:(NSNotification *)notification 
{ 
    NSWindow *window = [notification object]; 
    _parentOrigin = [[window parentWindow] frame].origin; 
} 

- (void)windowDidMove:(NSNotification *)notification 
{ 
    NSWindow *window = [notification object]; 
    NSPoint newParentOrigin = [[window parentWindow] frame].origin; 
    if (_parentOrigin.x == newParentOrigin.x && 
     _parentOrigin.y == newParentOrigin.y) 
    { 
     // The parent hasn't moved, therefore the user moved the window directly... 
     [window doThing]; 
    } 
} 

回答

4

你,如果是移動,移動母公司的結果點擊移動將成爲重要窗口,而子窗口不會成爲關鍵窗口窗口。因此,如果您測試發送通知的窗口是否爲關鍵窗口,則可以分辨用戶移動了哪個窗口。

- (void)windowDidMove:(NSNotification *)notification { 
    NSWindow *movedWindow = notification.object; 
    if ([movedWindow isKeyWindow]) { 
     NSLog(@"%@",movedWindow); 
     [movedWindow doThing]; 
    } 
} 
+0

這很有趣。你能解釋爲什麼'關鍵'地位在這裏很重要嗎? – trojanfoe

+0

沒關係;我想我明白。我會在早上嘗試一下,讓你知道我如何繼續;如果它有效,這是一個更好的解決方案,需要少一個伊娃和一個較少的委託方法。 – trojanfoe

+1

我編輯我的答案是更完整的,所以測試isKey的原因對其他人都是清楚的。 – rdelmar