UIButton 奇怪的状态变化(UIControlState)
Strange state change(UIControlState) of UIButton
我在理解 UIControlState
的概念时得到了一个奇怪的 UIButton
结果。这是我与 UIButton
.
相关的简单代码
import UIKit
class ViewController: UIViewController {
let normalBtn: UIButton = {
let button = UIButton()
button.frame = CGRect(x: 80, y: 200, width: 200, height: 100)
button.setTitle("", for: .normal)
button.setTitle("", for: .highlighted)
button.setTitle("", for: .selected)
button.setTitle("", for: .focused)
button.titleLabel?.font = UIFont.systemFont(ofSize: 50)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(normalBtn)
normalBtn.addTarget(self, action: #selector(btnSelected), for: .touchUpInside)
}
@objc func btnSelected() {
print("highlight", normalBtn.isHighlighted)
normalBtn.isSelected = !normalBtn.isSelected
}
}
这是我关于这段代码的场景。
- 当我触摸
normalBtn
时,此按钮的状态变为 normal
selected
。
- 当我再次触摸
normalBtn
时,它的状态从
selected
到 normal
。
- 虽然这些转换,
highlighted
属性 也应该改变,当我触摸 normalBtn
.
所以我对更改标题的期望是
- -> 触摸时 -> (
normal
到 selected
)
- -> 触摸时 -> (
selected
到 normal
)
但是结果是,
- -> 触摸时 -> (
normal
到 selected
)
- -> (
selected
到 normal
)
我真的不知道为什么。关于这个问题的任何想法?谢谢。
尝试添加选中状态并结合高亮状态。
示例:
button.setTitle("", for: UIControlState.selected.union(.highlighted))
已接受答案的替代语法:
button.setTitle("", for: [.selected, .highlighted])
我在理解 UIControlState
的概念时得到了一个奇怪的 UIButton
结果。这是我与 UIButton
.
import UIKit
class ViewController: UIViewController {
let normalBtn: UIButton = {
let button = UIButton()
button.frame = CGRect(x: 80, y: 200, width: 200, height: 100)
button.setTitle("", for: .normal)
button.setTitle("", for: .highlighted)
button.setTitle("", for: .selected)
button.setTitle("", for: .focused)
button.titleLabel?.font = UIFont.systemFont(ofSize: 50)
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(normalBtn)
normalBtn.addTarget(self, action: #selector(btnSelected), for: .touchUpInside)
}
@objc func btnSelected() {
print("highlight", normalBtn.isHighlighted)
normalBtn.isSelected = !normalBtn.isSelected
}
}
这是我关于这段代码的场景。
- 当我触摸
normalBtn
时,此按钮的状态变为normal
selected
。 - 当我再次触摸
normalBtn
时,它的状态从selected
到normal
。 - 虽然这些转换,
highlighted
属性 也应该改变,当我触摸normalBtn
.
所以我对更改标题的期望是
- -> 触摸时 -> (
normal
到selected
) - -> 触摸时 -> (
selected
到normal
)
但是结果是,
- -> 触摸时 -> (
normal
到selected
) - -> (
selected
到normal
)
我真的不知道为什么。关于这个问题的任何想法?谢谢。
尝试添加选中状态并结合高亮状态。
示例:
button.setTitle("", for: UIControlState.selected.union(.highlighted))
已接受答案的替代语法:
button.setTitle("", for: [.selected, .highlighted])