我目前正处于一个项目的开始,试图为UIViews,UIButtons和UIImageViews创建一些通用的可检查/可设计的变量,以使InterfaceBuilder中的设计更加容易。例如:
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
我看到要实现这一目标的一个建议是:
extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
}
但是,问题在于,现在UIView的all子类显示了可检查的属性,当我可能仅在三个类上使用这些属性时,这是有问题的,并且我添加了诸如边框宽度/颜色,阴影半径,不透明度,偏移量和颜色,它们占据了IB中许多检查器窗格。
我想要这样的东西:
@IBDesignable class MyView: UIView, MyDesignable {}
@IBDesignable class MyButton: UIButton, MyDesignable {}
@IBDesignable class MyImageView: UIImageView, MyDesignable {}
protocol MyDesignable {}
extension MyDesignable where Self: UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
...
不幸的是,@IBInspectable
弹出错误Only instance properties can be declared @IBInspectable
。
我也尝试过:
@IBDesignable class MyView: UIView {}
@IBDesignable class MyButton: UIButton {}
@IBDesignable class MyImageView: UIImageView {}
private extension UIView {
@IBInspectable
var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
...
}
但是,其他UIView子类仍显示可检查的属性。
希望问题背后的意图是有意义的。如果您有任何建议,请告诉我。谢谢!
如果只有三个需要这些属性的对象,则分别对每个子类进行子类化可能是一个更好的选择。