按下按钮在两种颜色之间交替显示UIView背景

时间:2019-02-19 00:24:37

标签: ios cocoa-touch uiview

我正在尝试设置一个按钮,每次按下该按钮时,将在两种颜色(黑色和白色)之间交替显示。 最初,该应用会加载为黑色背景,点击第一个按钮,它将交换为白色背景,第二次点击,它将交换回黑色背景,如此为第四。

我想这将是一个简单的if语句,但是我不知道如何创建一个当前UI背景色的变量。

@IBAction func background_toggle(_ sender: UIButton) {
    self.view.backgroundColor = UIColor.white
}

该按钮将其交换为白色,但是没有任何实现可在再次按下时将其交换回黑色。

2 个答案:

答案 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


提示:

由于backgroundColorUIColor,因此Swift会推断出类型,因此您在分配时只需键入.white.black,而不必指定{{1} }或UIColor.white

您可以使用状态变量,例如UIColor.blackBoolUIColor。然后,您将其与视图而不是视图的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也可能会有所帮助。)