Как предложить «отправленное действие» из пользовательского класса? - PullRequest
0 голосов
/ 18 сентября 2018

Я занимаюсь разработкой пользовательского класса в Swift на основе NSObject.Это значок состояния меню / помощник меню.Когда я получаю событие для щелчка значка в моем пользовательском классе, я хочу передать его таким же образом, как NSButton позволяет создать IBAction, чтобы ответить пользователю, нажимающему кнопку.

Как мнесделать это?

Код:

Я регистрирую селектор в своем классе для прослушивания кликов:

statusItem.action = #selector(statusBarIconClicked)

Селектор, получающий это:

@objc func statusBarIconClicked(sender: AnyObject) {
    print("clicked clicked!!")
    // pass sent action on through a new sent action... how?     
}

Я хочу, чтобы это можно было связать с пользователем так же, как кнопка может привести к этому:

@IBAction func myClassSaysMenuWasClicked(_ sender: Any) {
// Reacting to that
}

Погуглил некоторое время и нашел: ничего.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Я работал над комментарием выше и гуглил дальше.Я нашел решение, чтобы изменить NSObject на NSController в этой строке:

class StatusMenuController: NSControl, NSMenuDelegate {

И запустить эту команду, когда я хочу вызвать отправленное действие:

if let theAction = self.action { NSApp.sendAction(theAction, to: self.target, from: self) }

Команда ifконечно, проверяя, чтобы действие действительно было установлено, прежде чем пытаться его использовать.

Во время моего исследования я не нашел способов добавить какие-либо дальнейшие отправленные действия.Похоже, путь сюда - это делегаты.

0 голосов
/ 18 сентября 2018

Я так понимаю, что вы спрашиваете об этом, что отображается в инспекторе подключений (это iOS, а не macOS, но это та же идея):

enter image description here

Тогда возникает вопрос: когда пользователь выбирает экземпляр моего класса в редакторе пера в Xcode, я бы хотел, чтобы эти отправленные события появлялись в инспекторе соединений, чтобы пользователь мог подключитьсяодин из них и использовать архитектуру target-action.

Вы можете сделать это, только если ваш класс является подклассом Control.Так, например, в iOS пользовательский подкласс UIControl отображает отправленные события в Интерфейсном Разработчике.

Если вы не можете сделать это, программист не сможет настроить ваше целевое действие в ИнтерфейсеBuilder.Вы, конечно, можете реализовать архитектуру целевого действия, но программист должен будет установить цель и действие в коде.(Конечно, вы можете сделать половину работы, сделав цель аутлетом.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...