我缺乏一些基本的理解。
今天我想将一些UIView子类化,我查看了UIButton的定义,但我不知道它是如何工作的。
在UIButton定义中有如下属性:
open var adjustsImageWhenHighlighted: Bool
open var adjustsImageWhenDisabled: Bool
在使用UIButton时,何时设置UIButton的值并不重要,它总是以与tableView或任何其他UIKit类相同的正确方式进行配置。
我举了一个例子:
class customView: UIView {
var shouldSetupConstraints = true
var addAdditionalSpacing = true
var elements: [String]? {
didSet{
if addAdditionalSpacing == false {
doSomething()
}
}
}
func doSomething() {
}
override init(frame: CGRect) {
super.init(frame: frame)
setUpLayout()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func updateConstraints() {
if(shouldSetupConstraints) {
// AutoLayout constraints
shouldSetupConstraints = false
}
super.updateConstraints()
}
func setUpLayout() {
}
}
使用CustomView:
lazy var customV: CustomView = {
let v = CustomView()
v.addAdditionalSpacing = true
v.elements = ["One","Two"]
return v
}()
lazy var customV2: CustomView = {
let v = CustomView()
v.elements = ["One","Two"]
v.addAdditionalSpacing = true
return v
}()
因此,如果我使用的是CustomView,那么设置它的顺序就会有所不同,我理解其中的原因,但我不明白我必须以何种方式设计我的类,以便我可以随时设置这些值,除非使用不同的if didSet配置。为什么UIButton中的属性没有任何设置器,在这种情况下如何设置这些值?
任何到文档的链接也很受欢迎。
发布于 2018-06-06 05:24:07
首先,在UIButton中,您可以控制现有属性的didSet属性观察器,如下所示:
override var adjustsImageWhenDisabled: Bool {
didSet {
doStuff()
}
}
其次,在您的类场景中,您可以考虑在构造函数中传递参数:
init(shouldSetupConstraints: Bool = true, var addAdditionalSpacing = true)
这样,只要您需要,就可以随时使用这些属性。
如果这有帮助,请告诉我。
https://stackoverflow.com/questions/50708954
复制相似问题