通过按下按钮在两种颜色之间进行替代的Uiview背景



我试图设置一个按钮,每次按下时都会在两种颜色(黑白)之间交替。最初,该应用程序带有黑色背景,首先按钮点击将其交换为白色背景,第二点轻按,它交换回黑色背景,因此第四。

我认为如果其他语句是一个简单的话,但是我不知道如何创建一个当前UI背景颜色的变量。

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

该按钮将其交换为白色,但是当有第二次按下时,没有任何实现将其交换为黑色。

您可以使用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。我认为使用它与.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()
}

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

将您的模型与您的 view 分开,并保留具有当前状态的单独属性。您可以使用简单的布尔标志isBlack,也可以创建枚举:

enum BackgroundState {
    case black, white
}

如果您想要另一种颜色/状态,则具有更容易扩展的略有优势。(CaseIterable可能也有帮助。)

相关内容

  • 没有找到相关文章

最新更新