Как переместить NSWindow без перемещения дочерних NSWindows

#macos #cocoa #nswindow #nswindowcontroller

#macos #какао #nswindow #nswindowcontroller

Вопрос:

У меня есть главное окно, которое является центром моего приложения. Для разных функций я открываю дочернее окно для обработки определенных специализированных функций. Я хочу, чтобы все окна перемещались независимо, но прямо сейчас, если я перемещаю исходное центральное окно, все эти дочерние окна перемещаются вместе с ним. Как я могу отключить дочерние окна, чтобы они не перемещались вместе с родительским?

Ответ №1:

Временно удалите дочерние элементы перед перемещением окна, затем верните их обратно:

 - (void)windowWillMove:(NSNotification *)notification;
{
    [window removeChildWindow:child];
}

- (void)windowDidMove:(NSNotification *)notification
{
    if (![window inLiveResize])
            [window addChildWindow:child ordered:NSWindowAbove];
}
  

Или, если вам не нужен порядок NSWindowAbove, просто не делайте их дочерними в первую очередь 🙂

Комментарии:

1. Я пошел с «не делайте их дочерними в первую очередь».

2. разве это не поставит дочерний элемент ниже родительского при перемещении родительского элемента?

Ответ №2:

Другим способом вы можете показать свое дочернее окно, не добавляя его в качестве дочернего окна, но добиться того же поведения на уровне window’:

 [self.childWindowController showWindow:self];
[self.childWindowController.window setLevel:NSSubmenuWindowLevel];
  

Я не уверен, что этот метод является правильным и хорошим решением, но он работает для меня.