快速按下时突出显示按钮

问题描述 投票:0回答:4

我已经做了奥特莱斯和行动。 我已将代码链接到用户界面。

我想要一个按钮在按下时突出显示。这是我写的代码:

 @IBAction func buttonPressed(_ sender: UIButton) {
        sender.setTitleColor(UIColor(GL_GREEN), for: .highlighted)
}
swift colors highlight
4个回答
12
投票

您可以子类化 UIButton。创建一个新的 swift 文件并将其命名为您想要的任何名称,但在本例中我将其命名为“HighlightedButton”。在您创建的新文件中添加以下代码。该类的名称与您创建的文件相同。

import UIKit

class HighlightedButton: UIButton {

    override var isHighlighted: Bool {
        didSet {
            backgroundColor = isHighlighted ? .red : .green
        }
    }
}

下一步是将HighlightedButton 设置为按钮的类:

在情节提要中选择要更改的 UIButton。在右上角的身份检查器中,有一个名为“class”的字段,其中键入“HighlightedButton”并按 Enter 键。现在,当您的按钮突出显示时,它的颜色将更改为红色,当您释放按钮时,颜色将更改为绿色。

您可以更改为任何您想要的颜色。


5
投票

您必须进行 2 个动作,一个是“Touch down”和“Touch up inside”动作。更改这两个操作的背景颜色,您将实现您的目标


2
投票

2021年...

您只需将 ButtonType 设置为 .system 即可,按下时会高亮显示。

let button = UIButton(type: .system)

为了清楚起见,这是我制作的按钮:

lazy var myButton: UIButton = {
        let button = UIButton(type: .system)
        button.setTitle("Show More", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.titleLabel?.font = .systemFont(ofSize: 17, weight: .regular)
        button.layer.masksToBounds = true
        button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
        return button
}()
    
@objc fileprivate func buttonTapped() {
        //code for segue
}

0
投票

简单的方法:点击内置突出显示。

内置属性 showsTouchWhenHighlighted,点击时会导致短暂突出显示(“闪烁”)。如果您正在寻找快速解决方案,这尤其有效。

// Enable highlight effect on button tap
button.showsTouchWhenHighlighted = true

自定义动画

如果您需要更多地控制点击时按钮的外观,您可以使用自定义代码来处理不同的点击事件:

第 1 步:为不同的触摸状态设置按钮事件监听器。

func setupButton() {
    // Set up button properties
    // ...

    // Set up events to handle button highlight and release effects
    // Button touch started
    button.addTarget(self, action: #selector(buttonTouchDown), for: .touchDown)
    // Touch released within button boundaries > functional under button should happen        
    button.addTarget(self, action: #selector(buttonTouchUpInside), for: .touchUpInside) 
    // Touch released out of button boundaries > functional under button won't happen
    button.addTarget(self, action: #selector(buttonTouchUpOutside), for: .touchUpOutside)
}

第 2 步:实现按钮状态处理程序

    // Set background color when button is pressed
    @objc private func buttonTouchDown() {
        ctaButton.backgroundColor = .orange
    }
    
    // Set background color with animation when tap released within button boundaries 
    // and animate it's changing back
    @objc private func buttonTouchUpInside() {
        button.backgroundColor = UIColor.orange
        UIView.animate(withDuration: 0.2, animations: { [weak self] in
            self?.button.backgroundColor = .clear
        }, completion: { [weak self] _ in
            // Do action within this completion, if UI going to change after the tap👆 
        })
        // OR do action here, if UI won't change dramatically🙂
    }
    
    
    // Reset background color when button is released outside
    @objc private func buttonTouchUpOutside() {
        button.backgroundColor = .clear
    }
© www.soinside.com 2019 - 2024. All rights reserved.