【问题标题】:Alternate UIView background between two colors by pressing a button通过按下按钮在两种颜色之间交替 UIView 背景
【发布时间】:2019-07-12 10:13:08
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ios cocoa-touch uiview


    【解决方案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。我认为将它与一些像.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()
    }
    
    

    【讨论】:

    • 谢谢!如果我想将当前背景颜色另存为变量,可以再添加一个。我该怎么做? (这更出于兴趣)
    【解决方案2】:

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

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

    enum BackgroundState {
        case black, white
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-05
      • 2023-02-13
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      相关资源
      最近更新 更多