У меня есть приложение SwiftUI с меню раскадровки, в которое я добавил свой собственный элемент, который отключается при запуске приложения. Я создал следующий класс, чтобы сделать его включенным, и я вызываю метод initMenu из applicationDidFinishLaunching в AppDelegate, но пункт меню по-прежнему остается отключенным, что еще или дополнительно мне нужно сделать, чтобы включить его?
class MenuActions: NSObject {
func initMenu() {
let mainMenu = NSApplication.shared.mainMenu
mainMenu?.autoenablesItems = false
mainMenu?.item(at: 1)?.submenu?.item(at: 0)?.isEnabled = true
}
@IBAction func new(_ sender: NSMenuItem) {
print("fired")
}
}
Внутри AppDelegate вы можете просто добавить IBaction
@IBAction func new(_ sender: NSMenuItem) {
print("fired")
}
Затем подключите пункт меню в файле раскадровки к этой функции, и она включена по умолчанию.
Редактировать:
Вы можете создать свой собственный класс Menu, который обрабатывает действие MenuItems следующим образом:
class MenuItems : NSObject {
@IBAction func new(_ sender: NSMenuItem) {
print("fired")
}
}
Затем добавьте Object
в раскадровке в Application Scene и установите свой пользовательский класс для этого объекта. После этого подключите свои IBactions
Да, вы также можете создать собственный класс, добавить его в свою раскадровку и подключить IBactions. Отредактировано выше
Извините, что снова беспокою, но что вы подразумеваете под «добавить объект в сцену приложения»? Я могуt make Ctlr-drag connection to IBAction new if it
не помещать в AppDelegate.
Не беспокойтесь, вы переходите к раскадровке. Затем в верхней части Xcode у вас есть кнопка «+». Найдите объект и добавьте его в верхнюю панель MenuBar.
Большое спасибо.
Большое спасибо. Есть ли способ поместить @IBAction где-нибудь еще, кроме AppDelegate? Просто для любопытства.