Swift: 按下按钮时更改 UIButton backgroundColor?
Swift: Change UIButton backgroundColor when button is pressed?
我正在尝试创建一个由两个按钮(假按钮和真按钮)组成的测验应用程序。我的问题是,当我按下两个按钮之一时,我希望它在按下时仅在短时间内更改其背景颜色,然后我希望它恢复到原来的颜色,但我不知道如何更改背景颜色很快。到目前为止,这是这部分的代码:
@IBAction func answerButtonPressed(_ sender: UIButton) {
let userAnswer = sender.currentTitle
let actualAnswer = quiz[questionNumber].answer
if userAnswer == actualAnswer {
sender.backgroundColor = UIColor.green
} else {
sender.backgroundColor = UIColor.red
}
if questionNumber + 1 < quiz.count {
questionNumber += 1
}
else {
questionNumber = 0
}
updateUI()
}
func updateUI() {
questionLabel.text = quiz[questionNumber].text
trueButton.backgroundColor = UIColor.clear
falseButton.backgroundColor = UIColor.clear
}
你可以试试
// add this code snippet outside of any class
extension UIButton {
func shortChangeTo(_ color:UIColor) {
let prev = self.backgroundColor
self.backgroundColor = color
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.backgroundColor = prev
}
}
}
使用它
if userAnswer == actualAnswer {
sender.shortChangeTo(.green)
} else {
sender.shortChangeTo(.red)
}
并改变
updateUI()
到
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.updateUI()
}
这是 UIButton 扩展,带有动画的短时间颜色更改背景。
extension UIButton {
func shortChangeBackground(with color: UIColor) {
let originalColor = self.backgroundColor
UIView.animate(withDuration: 0.3) {
self.backgroundColor = color
}
UIView.animate(withDuration: 0.3, delay: 1.0) {
self.backgroundColor = originalColor
}
}
}
使用:
@IBAction func onDoneAction(_ sender: UIButton) {
sender.shortChangeBackground(with: userAnswer == actualAnswer ? UIColor.green : UIColor.red)
}
这将帮助您将按钮颜色更改为您想要的颜色(绿色或红色或其他颜色)并延迟 0.2 秒将其更改回清除。以最简单的方式。
在答案检查完成后,在 answerButtonPressed 的 IBAction 中放置以下行。
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(updateUI), userInfo: nil, repeats: false)
在选择器中,指定用于更新用户界面的函数。
在这种情况下,以下是最快最简单的解决方案:
只需按如下方式更改 'updateUI ()' 函数:
func updateUI() {
questionLabel.text = quiz[questionNumber].text
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
self.trueButton.backgroundColor = UIColor.clear
self.falseButton.backgroundColor = UIColor.clear
}
}
那么这里发生了什么?
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3)
在将背景更改回清晰颜色之前,上面的代码行将 green/red 颜色保持 0.3 秒(您可以根据自己的喜好更改此数字)。
我正在尝试创建一个由两个按钮(假按钮和真按钮)组成的测验应用程序。我的问题是,当我按下两个按钮之一时,我希望它在按下时仅在短时间内更改其背景颜色,然后我希望它恢复到原来的颜色,但我不知道如何更改背景颜色很快。到目前为止,这是这部分的代码:
@IBAction func answerButtonPressed(_ sender: UIButton) {
let userAnswer = sender.currentTitle
let actualAnswer = quiz[questionNumber].answer
if userAnswer == actualAnswer {
sender.backgroundColor = UIColor.green
} else {
sender.backgroundColor = UIColor.red
}
if questionNumber + 1 < quiz.count {
questionNumber += 1
}
else {
questionNumber = 0
}
updateUI()
}
func updateUI() {
questionLabel.text = quiz[questionNumber].text
trueButton.backgroundColor = UIColor.clear
falseButton.backgroundColor = UIColor.clear
}
你可以试试
// add this code snippet outside of any class
extension UIButton {
func shortChangeTo(_ color:UIColor) {
let prev = self.backgroundColor
self.backgroundColor = color
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.backgroundColor = prev
}
}
}
使用它
if userAnswer == actualAnswer {
sender.shortChangeTo(.green)
} else {
sender.shortChangeTo(.red)
}
并改变
updateUI()
到
DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
self.updateUI()
}
这是 UIButton 扩展,带有动画的短时间颜色更改背景。
extension UIButton {
func shortChangeBackground(with color: UIColor) {
let originalColor = self.backgroundColor
UIView.animate(withDuration: 0.3) {
self.backgroundColor = color
}
UIView.animate(withDuration: 0.3, delay: 1.0) {
self.backgroundColor = originalColor
}
}
}
使用:
@IBAction func onDoneAction(_ sender: UIButton) {
sender.shortChangeBackground(with: userAnswer == actualAnswer ? UIColor.green : UIColor.red)
}
这将帮助您将按钮颜色更改为您想要的颜色(绿色或红色或其他颜色)并延迟 0.2 秒将其更改回清除。以最简单的方式。
在答案检查完成后,在 answerButtonPressed 的 IBAction 中放置以下行。
Timer.scheduledTimer(timeInterval: 0.2, target: self, selector: #selector(updateUI), userInfo: nil, repeats: false)
在选择器中,指定用于更新用户界面的函数。
在这种情况下,以下是最快最简单的解决方案:
只需按如下方式更改 'updateUI ()' 函数:
func updateUI() {
questionLabel.text = quiz[questionNumber].text
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
self.trueButton.backgroundColor = UIColor.clear
self.falseButton.backgroundColor = UIColor.clear
}
}
那么这里发生了什么?
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3)
在将背景更改回清晰颜色之前,上面的代码行将 green/red 颜色保持 0.3 秒(您可以根据自己的喜好更改此数字)。