【问题标题】:Looking for help. view.backgroundColor寻求帮助。 view.backgroundColor
【发布时间】:2021-05-27 08:59:42
【问题描述】:

我是快速编程的新手,在解决这个项目时遇到了麻烦。我需要让按钮背景每次单击时都会改变颜色,如果它只有两种颜色但不超过这种颜色,我已经设法解决它。任何帮助表示赞赏。这就是我设法使用两种颜色的方法。

import UIKit

class ViewController: UIViewController {

    var lightOn = true
    
    override func viewDidLoad() {
        super.viewDidLoad()
        updateUI()
    }
    
    @IBAction func buttonPressed(_ sender: Any) {
        lightOn.toggle()
        updateUI()
    }
    func updateUI() {
        if lightOn {
            view.backgroundColor = .orange
        } else {
            view.backgroundColor = .yellow
        }
    }
}

【问题讨论】:

  • 创建一个UIColor 数组并使用一个Int 索引,该索引会在点击按钮时增加?
  • 你想要随机颜色吗?
  • 是的,aheze,任意三种随机颜色。

标签: swift button background-color


【解决方案1】:

您已经完成了一半 - 您有一个执行 updateUI 的按钮点击。事实是,您甚至不需要一个名为lightOn 的变量。尝试使用switch,而不是if 语句:

switch view.backgroundColor {
case UIColor.orange:
    view.backgroundColor = .red
case UIColor.red:
    view.backgroundColor = .green
case UIColor.green:
    view.backgroundColor = .blue
default:
    break
}

这将从橙色循环到红色再到蓝色。根据需要添加颜色。几点说明:

  • 除非您在 enum 中定义颜色,否则如果没有此 default,您将收到编译器错误。如果您确实定义了您想要的颜色,那么您只需完全 将定义的每种颜色放入 switch 语句中。这确实是很好的编码——因为你现在没有它就无法构建。

  • 注意将视图颜色初始化为 switch 语句中专门定义的颜色。

  • 现在,如果您需要从……说(1)红色到绿色再到(2)红色到蓝色再到(3)红色到橙色……基本上,从“关闭”到“开启”交替" 其中 "on" 循环到不同的颜色,是的,无论如何 use lightOn and 将此 switch 语句移到您发布的 if 语句旁边,设置它像你一样。

【讨论】:

  • 如果使用开关可以让开关填满整个屏幕吗?因为我只想让按钮在 iPhone 中填满整个屏幕并删除刻字“按钮”,所以当点击它时整个屏幕会变成所说的颜色,但实际上你点击按钮。
  • 我想。实际上,我发布的代码只会更改按钮 - 但您的代码适用于视图。 :-) 只需使用按钮背景颜色而不是视图。所有的 switch 语句实际上是一个比 if 和嵌套 if else 更易读的代码很多。 (此外,Swift 编译器在构建时提供了更多帮助。
  • 您需要一个 .blue 的案例。否则会卡在蓝色。你可以让它回到.red。
  • @Swiftnoob,switch @dfd 表示 switch 语句,而不是 UISwitch。 switch 语句类似于扩展的 if-else。 UISwitch 是打开/关闭用户界面元素。
  • 谢谢,ahaze,总有一天我会搞定的。 @dfd-这可能是一个愚蠢的问题,但我在哪里放置枚举?我看过谷歌,我认为这会起作用 enum ColorName: String { case red, blue, green }。我已经在 if 语句中使用 switch 命令进行了编译,但是按下按钮时它不会改变颜色,我会继续努力。谢谢