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
    }

}

这是我关于这段代码的场景。

  1. 当我触摸 normalBtn 时,此按钮的状态变为 normal selected
  2. 当我再次触摸 normalBtn 时,它的状态从 selectednormal
  3. 虽然这些转换,highlighted 属性 也应该改变,当我触摸 normalBtn.

所以我对更改标题的期望是

  1. -> 触摸时 -> (normalselected)
  2. -> 触摸时 -> (selectednormal)

但是结果是,

  1. -> 触摸时 -> (normalselected)
  2. -> (selectednormal)

我真的不知道为什么。关于这个问题的任何想法?谢谢。

尝试添加选中状态并结合高亮状态。

示例:

button.setTitle("", for: UIControlState.selected.union(.highlighted))

已接受答案的替代语法:

button.setTitle("", for: [.selected, .highlighted])