IBInspectable UIView недвижимость
Могу ли я сделать свой UIView @property инспектируемым?
@interface Superview : UIView
@property (nonatomic, weak, readonly) IBInspectable UIButton *stopButton;
@property (nonatomic, weak, readonly) IBInspectable PKCircleProgressView *circleProgressView;
@end
Я создал проектируемое представление PKCircleProgressView, и я хочу, чтобы оно было редактируемым из IB. Также я создал еще одно оформляемое представление, которое содержит PKCircleProgressView в качестве подпредставления, и я хочу, чтобы оно также было редактируемым.
Есть ли способ отредактировать свойства circleProgressView, если я использую Superview в IB?
Я выдвинул только одну идею - создать общий протокол для обоих представлений и реализовать такие методы, как:
- (void)setProgress:(CGFloat)progress {
self.circleProgressView.progress = progress;
}
но это не легко сделать с каждым свойством, особенно если я хочу создать другое представление, которое содержит мое суперпредставление.
2 ответа
IBInspectable не поддерживает UIView или его подтипы. Он поддерживает простые значения.
Если ваш пользовательский вид прогресса - IBDesignable, почему бы не установить его свойства, такие как радиус и цвет переднего плана, на IBInspectable, а в конструкторе интерфейса выбрать вид прогресса и изменить свойства вида прогресса?
Если вы создаете суперпредставление IBDesignable, вы можете раскрыть проверяемые свойства его кнопки и представления прогресса, используя что-то вроде шаблона Decorator.
Нет, вы не можете сделать UIView проверяемым. Использование IBInspectable предназначено только для настройки закодированного свойства "значение ключа" экземпляра в NIB или раскадровке. Предположим, если UIView будет ключом, то каково будет его значение? UIView не будет иметь значения, поэтому вы не можете сделать UIView Inspectable. Но мы можем сделать атрибуты UIView Inspectable такими как:
UIView's backgroundColor, ширина, высота и т. Д.
Пример проекта: IBDesignable и IBInspectable