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

1 回答 1

4

您单击移动的窗口将成为关键窗口,而子窗口如果因移动父窗口而移动,则不会成为关键窗口。因此,如果您测试发送通知的窗口是否是关键窗口,您可以知道用户移动了哪个窗口。

- (void)windowDidMove:(NSNotification *)notification {
    NSWindow *movedWindow = notification.object;
    if ([movedWindow isKeyWindow]) {
        NSLog(@"%@",movedWindow);
        [movedWindow doThing];
    }
}
于 2012-05-06T21:50:08.173 回答