簡體   English   中英

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 ,此按鈕的狀態變為normalselected
  2. 當我再次觸摸normalBtn時,它的狀態從selected變為normal
  3. 當我觸摸normalBtn時,雖然這些轉換, highlighted屬性也應該改變。

所以我對改變標題的期望是

  1. 🙂 -> 😆 觸摸時 -> 😍( normal selected
  2. 😍 -> 😆 觸摸時 -> 🙂( selected normal

但結果是,

  1. 🙂 -> 😆 觸摸時 -> 😍( normal selected
  2. 😍 -> 🙂( selected normal

我真的不知道為什么。 關於這個問題的任何想法? 謝謝。

嘗試將選定狀態與突出顯示狀態相結合。

例子:

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

已接受答案的替代語法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM