使用 Firebase 观察数据更新 UI (Swift)
Posted
技术标签:
【中文标题】使用 Firebase 观察数据更新 UI (Swift)【英文标题】:Update UI with Firebase Observe Data (Swift) 【发布时间】:2020-04-18 22:49:47 【问题描述】:在观察 Firebase 节点时,我很难更新我的 Swift 应用程序的 UI。我有一个red_value
、一个green_value
和一个blue_value
存储在firebase 中,它们被提取并用于构造一个UIColor
,然后用于更新我的UI 上按钮的背景颜色。我成功地获取了颜色值,但是当我尝试从观察闭包中更新 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)
它按预期工作,这意味着 redValue
、greenValue
和 blueValue
变量正在发生某些事情
提前感谢您的帮助!
【问题讨论】:
可能是 UI(按钮)的更新必须在主线程上完成,而不是在另一个线程内完成。 尝试在主线程上运行 DispatchQueue,没有成功 【参考方案1】:事实证明,我忘记将每个颜色值除以 255 以将它们置于 0.0 - 1.0 范围内。如果该值大于 1.0,则设置为 1.0,即为白色。
除以 255 后,它就像一个魅力
【讨论】:
以上是关于使用 Firebase 观察数据更新 UI (Swift)的主要内容,如果未能解决你的问题,请参考以下文章
删除 SwiftUI 后 Firebase Firestore 不更新 UI