我正在尝试设置一个按钮,每次按下它会在两种颜色(黑色和白色)之间交替。最初应用程序加载黑色背景,第一个按钮点击它交换到白色背景,第二个点击它交换回黑色背景,所以第四。
我想这将是一个简单的if else语句,但是我不知道如何创建一个当前UI背景颜色的变量。
@IBAction func background_toggle(_ sender: UIButton) {
self.view.backgroundColor = UIColor.white
}
按钮将其交换为白色,但没有任何实现可以在第二次按下时切换回黑色。
您可以使用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
,而不必指定UIColor.white
或UIColor.black
。
你可以有一个状态变量,如Bool
,UIColor
或Enum
。然后你比较而不是视图的backgroundColor
。
使用Bool变量的方法
var isWhite = true
@objc func handleOpenTermsAndConditions() {
if self.isWhite {
self.isWhite = false
self.view.backgroundColor = .black
} else {
self.isWhite = true
self.view.backgroundColor = .white
}
}
使用UIColor变量的方法
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状态的方法
如果要限制颜色,可以使用可用颜色创建Enum
。我认为用一些像.white
一样简单的逻辑来使用它是有点过头了.black
。
第1步:创建一个enum
。
enum AvailableColor {
case white
case black
func currentUIColor() -> UIColor {
switch self {
case .white:
return UIColor.white
case .black:
return UIColor.black
}
}
}
第2步:实例化状态变量并使用enum
逻辑
var currentColorState : AvailableColor = .white
@objc func handleOpenTermsAndConditions() {
if currentColorState == .white {
currentColorState = .black
} else {
currentColorState = .white
}
self.view.backgroundColor = currentColorState.currentUIColor()
}
不要尝试通过比较颜色来使用视图的内容来确定下一个状态。
从您的视图中分离出您的模型,并保留一个具有当前状态的单独属性。你可以使用一个简单的布尔标志isBlack
,或者你可以创建一个枚举:
enum BackgroundState {
case black, white
}
如果你想要另一种颜色/状态,它具有更容易扩展的轻微优势。 (CaseIterable
也可能会有所帮助。)