我正在尝试设置一个按钮,每次按下该按钮时,将在两种颜色(黑色和白色)之间交替显示。 最初,该应用会加载为黑色背景,点击第一个按钮,它将交换为白色背景,第二次点击,它将交换回黑色背景,如此为第四。
我想这将是一个简单的if语句,但是我不知道如何创建一个当前UI背景色的变量。
@IBAction func background_toggle(_ sender: UIButton) {
self.view.backgroundColor = UIColor.white
}
该按钮将其交换为白色,但是没有任何实现可在再次按下时将其交换回黑色。
答案 0 :(得分:1)
您可以使用backgroundColor
作为条件来检查接下来应该选择哪个。
使用backgroundColor属性进行处理
@IBAction func background_toggle(_ sender: UIButton) {
if self.view.backgroundColor == .white {
self.view.backgroundColor = .black
} else {
self.view.backgroundColor = .white
}
}
换句话说:如果backgroundColor
是.white
,则将其设置为.black
否则,将其设置为.white
提示:
由于backgroundColor
是UIColor
,因此Swift会推断出类型,因此您在分配时只需键入.white
或.black
,而不必指定{{1} }或UIColor.white
。
您可以使用状态变量,例如UIColor.black
,Bool
或UIColor
。然后,您将其与视图而不是视图的Enum
进行比较。
使用布尔变量进行处理
backgroundColor
使用UIColor变量进行处理
var isWhite = true
@objc func handleOpenTermsAndConditions() {
if self.isWhite {
self.isWhite = false
self.view.backgroundColor = .black
} else {
self.isWhite = true
self.view.backgroundColor = .white
}
}
使用枚举状态的方法
如果要限制颜色,可以创建具有可用颜色的var currentBackgroundColor : UIColor = .white
@objc func handleOpenTermsAndConditions() {
if currentBackgroundColor == .white {
self.currentBackgroundColor = .black
self.view.backgroundColor = .black
} else {
self.currentBackgroundColor = .white
self.view.backgroundColor = .white
}
}
。我认为,将其与Enum
| .white
。
第1步:创建一个.black
。
enum
第2步:实例化状态变量并使用enum AvailableColor {
case white
case black
func currentUIColor() -> UIColor {
switch self {
case .white:
return UIColor.white
case .black:
return UIColor.black
}
}
}
逻辑
enum
答案 1 :(得分:0)
不要尝试使用视图的内容通过比较颜色来确定下一个状态。
从视图中分离出模型,并保留具有当前状态的单独属性。您可以使用简单的布尔标志isBlack
,也可以创建枚举:
enum BackgroundState {
case black, white
}
具有一点优点:如果您想要其他颜色/状态,则更易于扩展。 (CaseIterable
也可能会有所帮助。)