簡體   English   中英

如何在 Swift 3 中突出顯示(或點擊)按鈕時更改 UIButton 邊框顏色?

[英]How to change UIButton border color when button is highlighted (or tapped on) in Swift 3?

這就是我目前所擁有的。 想知道如何在點擊或突出顯示按鈕時更改按鈕的邊框顏色。 到目前為止,我只能使用按鈕的文本顏色來做到這一點。 任何幫助或提示都會很棒,謝謝。

@IBOutlet weak var createNewWorkoutButton: UIButton!

@IBAction func createWorkoutBtn(_ sender: UIButton) {

}

override func viewDidLoad() {
    super.viewDidLoad()

    createNewWorkoutButton.setTitleColor(UIColor .gray, for: UIControlState.highlighted)

    if createNewWorkoutButton = UIControlState.highlighted {
        createNewWorkoutButton.layer.borderColor = UIColor.gray.cgColor
    }

}

實現此目的的一種方法是為 touchUp 和 touchDown 操作附加目標,如下所示:

override func viewDidLoad() {
   super.viewDidLoad()

   createNewWorkoutButton.setTitleColor(UIColor .gray, for: UIControlState.highlighted)

   createNewWorkoutButton.addTarget(self, action: #selector(setButtonSelected(button:)), for: .touchDown);
   createNewWorkoutButton.addTarget(self, action: #selector(setButtonSelected(button:)), for: .touchUpInside);

}

func setButtonSelected(button : UIButton) {
    //layout for selected state
}

func setButtonUnselected(button : UIButton) {
    //layout for unselected state
}

您可以為高光狀態指定背景圖像(邊框樣式)。 例如:

    UIGraphicsBeginImageContext(createNewWorkoutButton.frame.size);
    let context = UIGraphicsGetCurrentContext();

    context?.setStrokeColor(UIColor.red.cgColor);
    context?.setLineWidth(1.0);
    context?.stroke(CGRect.init(x: 0, y: 0, width: createNewWorkoutButton.frame.size.width,
                                 height: createNewWorkoutButton.frame.size.height));
    let image = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    createNewWorkoutButton.setBackgroundImage(image, for: UIControlState.highlighted);

如果您只想在觸摸DOWN 時更改顏色並在觸摸UP 時將其還原,只需使用isHighlighted通過子類化UIButton ,我認為這是一種更清潔的方法。 像這樣:

第一個場景:

在此處輸入圖片說明

     class MyButton: UIButton
    {
        override var isHighlighted: Bool {
            didSet {
                switch isHighlighted {
                case true:
                    layer.borderColor = UIColor.blue.cgColor
                    layer.borderWidth = 2
                case false:
                    layer.borderColor = UIColor.lightGray.cgColor
                    layer.borderWidth = 1
                }
            }
        }
    }

現在,如果您有很多按鈕並且您希望用戶知道所選按鈕,您可以嘗試下面的代碼,盡管我知道還有很多其他方法可以實現這一點,但這是我想出的最快方法。 代碼解釋了自己。

第二種情況:

在此處輸入圖片說明

    class Something: UIView {
        private lazy var firstButton: UIButton = {
        let btn = UIButton(type: .system)
        btn.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
        return btn
        }()

        private lazy var secondButton: UIButton = {
        let btn = UIButton(type: .system)
        btn.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
        return btn
        }()

        private lazy var thirdButton: UIButton = {
        let btn = UIButton(type: .system)
        btn.addTarget(self, action: #selector(buttonTapped(_:)), for: .touchUpInside)
        return btn
        }()

        @objc
        private func buttonTapped(_ sender: UIButton) {
        let myButtons = [self.firstButton, self.secondButton, self.thirdButton]

            for button in vatButtons {
                // state 1 means the button is on Selected State
                (button.state.rawValue == 1) ? button.layer.borderColor = UIColor.blue.cgColor : (button.layer.borderColor = UIColor.lightGray.withAlphaComponent(0.5).cgColor)
            }

        }
    }

暫無
暫無

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

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