#swift #xcode #macos
Вопрос:
Я выяснил, что есть windowDidEnterFullScreen
функция, NSWindowDelegate
позволяющая определять, когда окно переходит в полноэкранный режим.
У меня есть:
class WindowDelegate: NSWindowDelegate {
func windowDidEnterFullScreen(_ _: Notification) {
// Called when window will enter fullscreen
}
}
Как я могу заставить приложение зарегистрировать это, чтобы функция вызывалась, когда окно переходит в полноэкранный режим?
Ответ №1:
В приложении раскадровки есть окно Window Controller
внутри Main.storyboard
. По умолчанию Window Controller
используется NSWindowController
класс. Сначала вам нужно добавить NSWindowController
в свой класс, и я предлагаю переименовать его в WindowController
:
class WindowController: NSWindowController, NSWindowDelegate
Затем найдите Window Controller
в Window Controller Scene
в Main.storyboard
и выберите его, затем Пользовательский класс в инспекторе, введите имя пользовательского класса ( WindowController
) в поле класс. Это подскажет приложению использовать ваш пользовательский контроллер/делегат окна вместо стандартного NSWindowController
.
Комментарии:
1. К вашему сведению: Хотя использование вашего собственного
NSWindowController
подкласса обычно полезно, в данном случае это не является строго необходимым. Функция обратного вызова, в которой заинтересована операция (windowDidEnterFullScreen
), доступна наNSWindowDelegate
. Вы можете добавить новый объектNSWindowDelegate
класса, соответствующего вашему классу, в свою раскадровку и связать его непосредственно с вашими окнами (они могут быть даже настоящимиNSWindow
s, нет необходимости в подклассе), и это должно сработать.2. В этом случае вам даже не нужен пользовательский делегат, просто обратите внимание на уведомление.
3. @Willeke, Но какой путь чище?
4. Это зависит от того, что вам нужно, и это дело вкуса.