Создать настраиваемое действие в классе для использования в Интерфейсном Разработчике

Я хочу создать подключение настраиваемого действия в классе, которое должно быть видно в Интерфейсном Разработчике. Например - я добавляю свойства action / target в NSView класс просто так:

weak open var object: AnyObject?    
open var something: Selector?

Действие something и цель object, Теперь я хочу, чтобы в Интерфейсном Разработчике ссылка / соединение "Отправить действие" была доступна для something и чтобы иметь возможность подключиться к @IBAction метод для некоторого класса (например, контроллер представления), так же, как это может быть сделано для простого NSButton, Может быть, это невозможно, или, может быть, я должен добавить несколько ключевых слов перед парой настраиваемое действие / цель, так же, как нам нужно создать свойство @IBInspectable появляться в инспекторе атрибутов.

Любая помощь приветствуется;-)

2 ответа

Я не думаю, что вы можете сделать это. Можете добавить @IBInspectable свойства на заказ NSView подклассы, но нет никакого типа данных селектора или действия для свойств. Единственными допустимыми типами являются Boolean, Number, String, Localized String, Point, Size, Rect, Range, Color, Image, Nil.

Интерфейсный Разработчик имеет встроенную поддержку для обработки свойств целевого действия элементов управления.

(Кстати, вам, вероятно, следует добавить тег Mac OS в свой вопрос. Большая часть трафика Apple на этой доске связана с iOS.

РЕДАКТИРОВАТЬ:

Как кто-то сказал в комментарии, если вы создаете объект, который имеет цель / действие, он, вероятно, должен быть NSControlне NSView, Элементы управления - это семейство объектов, которые обрабатывают целевые действия, и в Интерфейсном Разработчике есть механизм добавления цели / действий к элементам управления.

В iOS есть один довольно дрянной вариант - у вас может быть выход для UIBarButtonItem, а затем кто-то может добавить автономный UIBarButtonItem в свой xib или раскадровку. Затем UIBarButtonItem может иметь цель / действие, и ваш класс может затем вытащить цель / действие оттуда в awakeFromNib и присвоить значения вашему собственному классу. Этот подход можно воспроизвести в MacOS с помощью NSToolbarItem, но я не пробовал. На самом деле это сложный вариант, поскольку он требует дополнительных объектов xib и может быть не слишком очевиден, но он может работать. По сути, UIBarButtonItem / NSToolbarItem будет действовать только как контейнер для значений цели / действия.

Если вы не можете создать подкласс NSControl, может показаться, что предпочтительным вариантом является наличие делегата. Обычно это нормально, если только один контроллер не должен быть делегатом для нескольких экземпляров вашего класса, и в этом случае методы делегата становятся более утомительными. Другой вариант состоит в том, чтобы у вашего класса было свойство блока, которое выполняется при действии, но блоки должны быть назначены в коде, а не настроены в Интерфейсном Разработчике.

Другие вопросы по тегам