Работает ли новый атрибут IBDesignable в Interface Builder с NSButton и другими элементами управления в Cocoa?

Мне удалось заставить атрибуты IBDesignable/IBInspectable работать с прямыми подклассами NSView, но не с прямым подклассом NSButton. Это заставляет меня задаться вопросом, действительно ли реализация Cocoa каким-то образом ограничена только NSView.

Почти каждый пример в Интернете (и видео Apple WWDC 2014 Xcode) использует NSView, а затем перетаскивает пользовательский компонент представления из библиотеки на холст (а затем изменяет его класс).

Можно ли использовать IBDesignable с подклассами NSControl и NSButton и т. д.? Я видел много примеров в Интернете с использованием UIButton.

Если можно, то что из библиотеки перетаскивать на канвас? Не имеет смысла, чтобы это был «пользовательский вид». С другой стороны, нет никакого «настраиваемого управления».

Чтобы было ясно, я могу заставить атрибут IBInspectable отображаться во время разработки; но любые изменения не отображаются в режиме реального времени во время разработки.

Обходной путь состоит в том, чтобы обернуть любой пользовательский NSButton, который я хочу создать, в NSView (через композицию), но это похоже на хак...


person Sam    schedule 12.12.2014    source источник
comment
Вы нашли какое-то решение?   -  person Nuzhdin Vladimir    schedule 05.01.2017


Ответы (2)


Я начал играть с пользовательскими NSButton и NSButtonCell.

Перетаскивание кнопки из библиотеки на холст и изменение ее класса и класса ячейки не отображаются в реальном времени. Я думаю, это потому, что Interface Builder по-прежнему делает много пользовательских настроек для настройки NSButtonCell.

Для меня отлично работает перетаскивание пользовательского представления из библиотеки на холст и установка его класса. Чтобы это работало, вам нужно настроить ячейку внутри NSButtons -initWithCoder:.

Также я нашел пример от Apple со слоем- поддерживаемый пользовательский флажок.

person catlan    schedule 17.12.2014
comment
Не могли бы вы уточнить, что для этого вам нужно настроить ячейку внутри NSButtons -initWithCoder: и почему это работает. В недавней документации от Apple говорится, что не следует трогать кнопку Cell, поэтому я не уделял много внимания темам ячеек. Спасибо. - person Sam; 23.01.2015
comment
У кого-нибудь есть этот образец? У меня ошибка Извините, эта страница не найдена. знак равно - person Nuzhdin Vladimir; 05.01.2017
comment
@catlan - ссылка не работает - person Duck; 23.09.2017
comment
ссылка не работает, попробовал источник из Github - sampe больше не работает (пробовал checkbox.swift, и он не отображается, если он добавлен как nsbutton в раскадровку). Те, кто ищет решение - оно работает только с пользовательскими NSView, перетащенными в xib/storyboard. - person Marek H; 19.04.2020

Вам нужно перетащить NSButton в представление, а затем установить пользовательский класс для вашего конкретного потомка NSButton. Не уверен, почему это не работает, когда вы начинаете с NSView.

Что может дать вам подсказку, так это то, что атрибуты, специфичные для NSButton, отсутствуют в «Инспекторе атрибутов». Следовательно, во время перетаскивания элемента управления в представление должны быть некоторые настройки.

person Wizard of Kneup    schedule 05.06.2018