在UIButton上被多次调用

时间:2016-10-28 04:44:41

标签: ios swift uibutton

我已经将UIButton子类化了,并且当按钮进入突出显示状态时只想调用一次委托方法,并且当它进入未突出状态时再调用一次:

override var isHighlighted: Bool {
        didSet {
            if isHighlighted {
                delegate?.buttonHighlightStateDidChange(highlighted: true)
            } else {
                delegate?.buttonHighlightStateDidChange(highlighted: false)
            }
        }
    }

然而,当我触摸按钮时,看起来didSet被反复调用。我在这做错了什么?如何只调用一次委托方法?

1 个答案:

答案 0 :(得分:3)

我建议不要以这种方式使用你的子类。 UIControl有一个内置机制,用于获取回调以响应控件事件:

func registerActions(for button: UIButton) {
    button.addTarget(self, action: #selector(MyClass.buttonIsHighlighted(sender:)), for: .touchDown)

    button.addTarget(self, action: #selector(MyClass.buttonIsUnHighlighted(sender:)), for: .touchUpInside)
    button.addTarget(self, action: #selector(MyClass.buttonIsUnHighlighted(sender:)), for: .touchUpOutside)
}

func buttonIsHighlighted(sender: UIButton) {
    // highlighted
}

func buttonIsUnHighlighted(sender: UIButton) {
    // unhighlighted
}