Как прикрепить пользовательское меню к основному виду в настольном приложении OS X в Swift

Учитывая следующий проект GitHub:

https://github.com/kellyjanderson/swift-custom-menue

Как связать пункт меню Custom >> Custom Action с функцией customAction в ViewController?


person Kelly Anderson    schedule 10.07.2016    source источник
comment
Можете ли вы добавить более подробную информацию о коде, который вы написали   -  person triandicAnt    schedule 10.07.2016
comment
comment
Щелкните правой кнопкой мыши и перетащите.   -  person tbodt    schedule 11.07.2016
comment
@tbodt Это работает только при перетаскивании в AppDelegate.   -  person Kelly Anderson    schedule 11.07.2016
comment
Вам нужно поставить @IBAction перед функцией действия.   -  person tbodt    schedule 11.07.2016
comment
@tbodt Я только что попробовал, и он не подключается к разъему. :-\   -  person Kelly Anderson    schedule 11.07.2016
comment
Тогда я не знаю.   -  person tbodt    schedule 11.07.2016
comment
@Willeke Пожалуйста, взгляните на мой ответ, он похож на то, что обсуждалось в проблеме, на которую вы ссылались, но этот вопрос никогда не приводил к конкретным шагам для ответа на мой вопрос.   -  person Kelly Anderson    schedule 11.07.2016


Ответы (2)


Определите выход вашего пункта меню в AppDelegate

@IBOutlet weak var customMenuItem: NSMenuItem!

В вашем контроллере представления сначала получите экземпляр AppDelegate:

 let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate

Получите экземпляр пункта меню, а затем привяжите к нему IBAction:

appDelegate.customMenuItem.action = #selector(customAction(_:))

Например, вы хотите привязать действие customAction к пункту меню. Вы можете добавить следующий код в viewDidLoad

 override func viewDidLoad() {
        super.viewDidLoad()
         let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
         print(appDelegate.customMenuItem)
        appDelegate.customMenuItem.action = #selector(customAction(_:))
    }

А затем определите IBAction

 func customAction(sender: NSMenuItem){
        print("Custom Menu Item clicked")
    }

Выход:

<NSMenuItem: 0x6080000a0720 Custom Action>
Custom Menu Item clicked
person triandicAnt    schedule 11.07.2016
comment
Спасибо за этот отличный ответ. - person Ahmadreza; 06.02.2019

Итак, связанный вопрос Почему я не могу подключиться мое меню к моему контроллеру представления IBAction? подошло близко, но не дало мне конкретного решения. Вот как я решил это.

Сначала в ViewController вам нужно пометить свою функцию как @IBAction

    @IBAction func customAction(sender: NSMenuItem){
        print("Custom Menu Item clicked")
    }

Как только эта функция помечена как IBAction, она будет доступна в цепочке ответчика; так что теперь вы можете щелкнуть, удерживая клавишу Control, и перетащить элемент меню на значок первого ответчика и выбрать свою функцию, в этом примере customAction.

person Kelly Anderson    schedule 11.07.2016