作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个自定义的 UIButton,它具有一些我希望它具有的独特状态,例如:
enum PositionControlState : Int {
case Available = 0, Pending, Waiting, Approved, Declined
}
我做了一些谷歌搜索,发现了一些关于位掩码和 Objective-c 中的 UIControlState.Application 的内容。我觉得我有一些拼图,但不太确定如何在 swift 2.2 中将它们组合在一起。
最佳答案
我不确定你是否解决过这个问题,但我做类似事情的方式是这样的。
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
的所有函数都是公开可见的。类似于 UIControlEvents
有很多状态,但其中一些只用于特定类。
请记住,如果您继续采用这种方法,您包含的其他状态应保留在“控制状态”的相同上下文定义中。
关于swift - 如何使用位掩码在 Swift 2.2 中自定义 UIControlState?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39111041/
我是一名优秀的程序员,十分优秀!