#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];
Я не уверен, что этот метод является правильным и хорошим решением, но он работает для меня.