1

我有一个自定义 UIButton 具有一些我希望它具有的独特状态:

enum PositionControlState : Int {
    case Available = 0, Pending, Waiting, Approved, Declined
}

我做了一些谷歌搜索,发现了一些关于位掩码的东西,以及在 Objective-c 中的 UIControlState.Application。我觉得我有一些难题,但不太确定如何在 swift 2.2 中将它们组合在一起。

4

1 回答 1

1

我不确定你是否解决了这个问题,但我做类似事情的方式是这样的。

extension UIControlState {
    static let available = UIControlState(rawValue: 1 << 5)
    static let pending   = UIControlState(rawValue: 1 << 6)
    static let waiting   = UIControlState(rawValue: 1 << 7)
}

class Button: UIButton {
    private var isAvailable = false
    private var isPending = false
    private var isWaiting = false

    private func aFuncCalledWhenPending() {
        isPending = true
    }

    override var state: UIControlState {
        var s = super.state

        if isAvailable {
            s.insert(.available)
        }
        if isPending {
            s.insert(.pending)
        }
        if isWaiting {
            s.insert(.waiting)
        }

        return s
    }
}

这将允许您编写代码,例如button.setTitleColor(.red, for: .pending).

这种方法的问题是,对于所有接受UIControlState. 类似于 howUIControlEvents有很多状态,但其中一些仅用于特定的类。

请记住,如果您继续使用这种方法,您包含的其他状态应该保留在“控制状态”的相同上下文定义中。

于 2018-07-19T06:03:41.930 回答