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

问题描述 投票:1回答:2

我正在尝试设置一个按钮,每次按下它会在两种颜色(黑色和白色)之间交替。最初应用程序加载黑色背景,第一个按钮点击它交换到白色背景,第二个点击它交换回黑色背景,所以第四。

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

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

按钮将其交换为白色,但没有任何实现可以在第二次按下时切换回黑色。

ios cocoa-touch uiview
2个回答
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,而不必指定UIColor.whiteUIColor.black

你可以有一个状态变量,如BoolUIColorEnum。然后你比较而不是视图的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()
}


0
投票

不要尝试通过比较颜色来使用视图的内容来确定下一个状态。

从您的视图中分离出您的模型,并保留一个具有当前状态的单独属性。你可以使用一个简单的布尔标志isBlack,或者你可以创建一个枚举:

enum BackgroundState {
    case black, white
}

如果你想要另一种颜色/状态,它具有更容易扩展的轻微优势。 (CaseIterable也可能会有所帮助。)

© www.soinside.com 2019 - 2024. All rights reserved.