Как включить собственный пункт меню в приложении SwiftUI

#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. Большое вам спасибо.