Я делаю простое приложение в строке меню, которое состоит из 2 пунктов - Предпочтения & Выход
Я хочу открыть новое окно, когда нажимаю Предпочтения
В настоящее время у меня есть
func applicationDidFinishLaunching(_ aNotification: Notification) {
constructMenu()
}
func constructMenu() {
let menu = NSMenu()
menu.addItem(NSMenuItem(
title: "Preferences...",
action: #selector(AppDelegate.preferencesWindow(_:)),
keyEquivalent: "P"))
menu.addItem(NSMenuItem.separator())
menu.addItem(NSMenuItem(
title: "Quit",
action: #selector(NSApplication.terminate(_:)),
keyEquivalent: "q"))
statusItem.menu = menu
}
@objc func preferencesWindow(_ sender: Any) {
print("open preference window here")
if let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil) {
let controller = storyboard.instantiateControllerWithIdentifier("preferencesWindow")
as NSViewController
if let window = NSApplication.shared.mainWindow {
window.contentViewController = controller // just swap
}
}
}
Но в этой строке выдается ошибка
if let storyboard = NSStoryboard (имя: NSStoryboard.Name (rawValue: "Main"), комплект: nil) {
с указанием
Инициализатор для условного связывания должен иметь необязательный тип, а не 'NSStoryboard'
Когда я нажимаю Настройки оператор print регистрируется, но я не знаю, как программно открыть окно.
Я только что перетащил Контроллер окон из Библиотека объектов и получил Идентификатор StoryBoard Значение ПредпочтенияWindow
Я также попробовал следующее из-за вышеуказанной ошибки
@objc func preferencesWindow(_ sender: Any) {
print("open preference window here")
let storyboard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
let controller = storyboard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "preferencesWindow")) as! NSViewController
if let window = NSApplication.shared.mainWindow {
window.contentViewController = controller // just swap
}
}
но он только регистрирует и никогда не открывает окно. Что мне делать?