使用Firebase观察数据更新用户界面(快速)

时间:2020-04-18 22:49:47

标签: ios swift firebase firebase-realtime-database

在观察Firebase节点时,我很难在Swift应用程序上更新UI。我有一个red_value,一个green_value和一个blue_value,它们存储在firebase中,并正在获取这些数据并用于构建UIColor,然后将其用于更新背景色我的用户界面上的一个按钮。我已经成功获取了颜色值,但是当我尝试从watch闭包内部更新UI时,颜色总是变成白色,我不知道为什么。

下面可以找到我的代码,以更好地了解我在加载视图时要完成的工作:

override func viewDidLoad() {
        super.viewDidLoad()

        self.charitiesReference.child(charityUsername!).observe(.value) {
            snapshot in
            let values = snapshot.value as! [String: Any]

            let redValue = values["red_value"] as! CGFloat
            let greenValue = values["green_value"] as! CGFloat
            let blueValue = values["blue_value"] as! CGFloat
            let charityColor = UIColor(red: redValue, green: greenValue, blue: blueValue, alpha: 1.0)

            let ripplerFollowers = values["follower_ripplers"] as! [String: Bool]

            if ripplerFollowers["\(self.username!)"] ?? false {
                self.followOrFollowingButton.setTitle("Following", for: .normal)
                //ERROR -> The line below is producing a white background on my button 
                self.followOrFollowingButton.backgroundColor = charityColor
            } else {
                self.followOrFollowingButton.setTitle("Follow", for: .normal)
                self.followOrFollowingButton.backgroundColor = .clear
            }
        }
    }

更新: 当我将self.followOrFollowingButton.backgroundColor = charityColor行更改为self.followOrFollowingButton.backgroundColor = UIColor(red: 0, green: 120, blue: 120, alpha: 1.0)时 它按预期运行,这意味着redValuegreenValueblueValue变量

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

事实证明,我忘记了将每个颜色值除以255,而将它们设置在0.0-1.0范围内。如果该值大于1.0,则将其设置为1.0,从而导致白色。

除以255后,它的工作原理就像一种魅力