Swift - UIButton重写setSelected

Lor*_*ush 26 subclass uibutton ios swift

我正在Swift中创建一个UIButton子类,以便在选择时执行自定义绘图和动画

什么在Swift中等同- (void)setSelected:(BOOL)selected于ObjC?

我试过了

override var selected: Bool

所以我可以实现一个观察者,但我得到了

Cannot override with a stored property 'selected'

Bri*_*kel 60

与其他提到的一样,您可以使用它willSet来检测变化 但是,在覆盖中,您不需要将值分配给super,而只是观察现有的更改.

您可以从以下游乐场观察几件事:

  1. 覆盖willSet/didSet仍然调用super 的属性get/set.你可以说,因为状态从.normal变为.selected.
  2. willSet和didSet被称为甚至当值没有改变,所以你可能会想要做的值比较selected无论是newValuewillSetoldValuedidSet确定是否要动画.
import UIKit

class MyButton : UIButton {

    override var isSelected: Bool {
        willSet {
            print("changing from \(isSelected) to \(newValue)")
        }

        didSet {
            print("changed from \(oldValue) to \(isSelected)")
        }
    }
}

let button = MyButton()

button.state == .normal
button.isSelected = true // Both events fire on change.
button.state == .selected
button.isSelected = true // Both events still fire.
Run Code Online (Sandbox Code Playgroud)

  • 在**SWIFT3**`selected`已重命名为`isSelected` ...请更新:) (4认同)

hol*_*lex 7

你会像这样做:

class MyButton : UIButton {

    // ...

    override var isSelected: Bool {
        willSet(newValue) {
            super.isSelected = newValue;
            // do your own business here...
        }
    }

    // ...

}
Run Code Online (Sandbox Code Playgroud)