我已经做了奥特莱斯和行动。 我已将代码链接到用户界面。
我想要一个按钮在按下时突出显示。这是我写的代码:
@IBAction func buttonPressed(_ sender: UIButton) {
sender.setTitleColor(UIColor(GL_GREEN), for: .highlighted)
}
您可以子类化 UIButton。创建一个新的 swift 文件并将其命名为您想要的任何名称,但在本例中我将其命名为“HighlightedButton”。在您创建的新文件中添加以下代码。该类的名称与您创建的文件相同。
import UIKit
class HighlightedButton: UIButton {
override var isHighlighted: Bool {
didSet {
backgroundColor = isHighlighted ? .red : .green
}
}
}
下一步是将HighlightedButton 设置为按钮的类:
在情节提要中选择要更改的 UIButton。在右上角的身份检查器中,有一个名为“class”的字段,其中键入“HighlightedButton”并按 Enter 键。现在,当您的按钮突出显示时,它的颜色将更改为红色,当您释放按钮时,颜色将更改为绿色。
您可以更改为任何您想要的颜色。
您必须进行 2 个动作,一个是“Touch down”和“Touch up inside”动作。更改这两个操作的背景颜色,您将实现您的目标
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
}
简单的方法:点击内置突出显示。
内置属性 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
}