UIButton

时间:2017-11-20 04:32:12

标签: ios uibutton uicontrolstate

在理解UIButton的概念时,我得到了一个奇怪的UIControlState结果。这是我与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属性也应该更改。
  4. 所以我对改变头衔的期望是

    1. - >触摸时 - > (normalselected
    2. - >触摸时 - > (selectednormal
    3. 但结果是,

      1. - >触摸时 - > (normalselected
      2. - > (selectednormal
      3. 我真的不知道为什么。关于这个问题的任何想法?感谢。

2 个答案:

答案 0 :(得分:2)

尝试添加与突出显示状态组合的选定状态。喜欢:

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

答案 1 :(得分:0)

已接受答案的替代语法:

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