NSBorderlessWindowMask Subview NSTextfield недоступно для редактирования клавиш Swift
Я использую NSBorderlessWindowMask для моего главного окна в проекте Swift (без раскадровок), когда я загружаю Subview, выход NSTextfield не редактируется с помощью клавиш. Я уже положил этот код на инициализацию:
self.window?.makeKeyWindow() self.window?.becomeKeyWindow()
это позволяет розетке быть "синим", как на фокусе, но редактирование клавиатуры отключено, я могу скопировать / вставить текстовое поле
2 ответа
Я нашел отличное решение этой проблемы: в основном, настроить в начале маски NSWindow как NSTitledWindowMask, когда приложение загружено, удалить настроить новую маску NSBorderlessWindowMask
func applicationWillFinishLaunching(notification: NSNotification) {
self.window?.titleVisibility = NSWindowTitleVisibility.Hidden
self.window?.styleMask = NSTitledWindowMask // adds title bar
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
self.window?.makeKeyWindow()
self.window?.becomeKeyWindow()
self.window.setIsVisible(true)
self.window?.styleMask = NSBorderlessWindowMask // removes title bar
}
Вам нужно использовать пользовательский подкласс NSWindow
и переопределить canBecomeKeyWindow()
вернуть истину. По умолчанию он возвращает false для окон без строк заголовка (как задокументировано).
Вы, вероятно, хотите сделать то же самое для canBecomeMainWindow()
,
Кроме того, никогда не звоните becomeKeyWindow()
(кроме звонить super
в переопределении). Это вызывается Какао, чтобы сообщить окну, что оно стало ключевым окном. Он не указывает окну, чтобы оно стало ключевым окном.