#swiftui #menuitem
#swiftui #menuitem
Вопрос:
У меня есть приложение 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")
}
}
Ответ №1:
Внутри AppDelegate вы можете просто добавить IBAction
@IBAction func new(_ sender: NSMenuItem) {
print("fired")
}
Затем подключите пункт меню в файле раскадровки к этой функции, и она будет включена по умолчанию.
Редактировать:
Вы можете создать свой собственный класс Menu, который обрабатывает действие MenuItems следующим образом:
class MenuItems : NSObject {
@IBAction func new(_ sender: NSMenuItem) {
print("fired")
}
}
Затем добавьте Object
в раскадровку в сцену приложения и установите свой пользовательский класс для этого объекта. После этого подключите свои IBActions
Комментарии:
1. Отлично, спасибо. Есть ли какой-нибудь способ поместить @IBAction где-нибудь еще, кроме как в AppDelegate? Просто для любопытства.
2. Да, вы также можете создать пользовательский класс, добавить его в свою раскадровку и подключить IBActions. Отредактировано выше
3. Извините, что снова беспокою, но что вы подразумеваете под «добавить объект в сцену приложения»? Я
t make Ctlr-drag connection to IBAction new if it
не могу поместить его в AppDelegate.4. Не беспокойтесь, вы переходите к раскадровке. Затем в верхней части Xcode у вас есть кнопка » «. Найдите объект и добавьте его в верхнюю панель меню.
5. Большое вам спасибо.