设置类的值,例如UIButton

时间:2018-06-05 21:08:17

标签: swift uiview uibutton uikit subclassing

我缺乏一些基本的理解。

今天我想把一些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,它会对我设置的顺序产生影响,我理解为什么,但我不明白我必须以哪种方式设计我的类,以便我可以随时设置值,除了如果didSet配置不同。为什么UIButton中的属性没有任何setter,在这种情况下如何设置值?

任何指向文档的链接也会受到赞赏。

1 个答案:

答案 0 :(得分:0)

首先,在UIButton中,您可以控制现有属性的didSet属性观察者,如下所示:

override var adjustsImageWhenDisabled: Bool {
    didSet {
        doStuff()
    }
}

其次,在您的类场景中,您可以考虑在构造函数中传递参数:

init(shouldSetupConstraints: Bool = true, var addAdditionalSpacing = true)

这样,只要您需要,您就可以使用这些属性。

如果有帮助,请告诉我。