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 に答える