Для тех, кто не знает, о чем я говорю, Xcode 6.0 добавил новые функции, IBDesignable и IBInspectable.
Когда вы помечаете свои пользовательские представления свойствами IBInspectable, эти свойства отображаются в Инспекторе атрибутов в IB.
Аналогично, когда вы помечаете пользовательский подкласс UIView с IBDesignable, Xcode компилирует ваши представления и вызывает код для рендеринга ваших объектов вида прямо в окне Xcode, чтобы вы могли видеть, как они выглядят.
Метод добавления атрибутов IBDesignable и IBInspectable к пользовательским представлениям почти идентичен в Swift и Objective-C. Свойства IBInspectable отображаются в инспекторе атрибутов интерфейса Builder независимо от того, какой язык вы используете для их определения.
Я создал категорию UIView в Objective-C и расширение UIView в Swift, которое поддерживает свойства borderWidth, cornerRadius, borderColor и layerBackgroundColor слоя, лежащего в основе представления, как свойства представления. Если вы измените свойство, расширение/категория делает преобразование по мере необходимости и перенаправляет изменение на слой.
Часть IBInspectable отлично работает. Я вижу и могу установить новые свойства в инспекторе атрибутов IB.
Я мог бы поклясться, что на прошлой неделе атрибут IBDesignable в моей категории категорий/расширении тоже работал, и я мог видеть свою собственную визуализацию категорий UIView в IB с изменением атрибутов слоя. На этой неделе он не работает.
Был ли я галлюцинацией?
Можно ли использовать категории/расширения существующих системных классов свой пользовательский интерфейс в Interface Builder, когда они настроены с помощью IBDesignable?