gpt4 book ai didi

swift - Firestore - UITableViewCell 内的 UISlider

转载 作者:行者123 更新时间:2023-11-30 11:25:36 42 4
gpt4 key购买 nike

我在 tableView 的自定义单元格内有一个 UISlider。在单元格中还有一个显示 slider 值的 UILabel。目前我已经得到了它,这样我就可以将 slider 值更新到 firestore 以及标签中。但是,当我离开屏幕/应用程序并再次加载屏幕时,我无法将以前的 slider 值加载到 slider 中。我仍然可以更新 slider 值,它仍然会传输到 firestore 并且一切正常。我尝试在屏幕首次启动时将 firestore 中的值加载到 slider 中,效果非常好,但是当我执行此操作时,它不允许我更新屏幕上的 slider ,但它会在 firestore 上更新。完美的是,当屏幕首次加载时,数据从 firestore 加载,然后我可以更新 slider ,它将在应用程序和 firestore 中工作。任何帮助将不胜感激!非常感谢!!

View Controller

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell

cell.slider.tag = indexPath.row
cell.slider.addTarget(self, action: #selector(ViewController.sliderChange(sender:)), for: .valueChanged)

cell.sliderLabel.text = String(Int(cell.slider.value))

// code that loads values when screen is first launched but then doesn't let me update the onscreen values
cell.slider.value = Float(array[indexPath.row].number)

return cell
}

@objc func sliderChange(sender: UISlider) {
let currentValue = Int(sender.value)
let row = sender.tag
let Id = array[row].documentID

let userRef = db.collection("Users").document(user!)
userRef.collection("Friends").document(Id).updateData(["number" : currentValue]) {
error in
if let error = error {
print("Error adding document: \(error.localizedDescription)")
} else {
print(currentValue)
}
}

self.tableView.reloadData()

}

TableViewCell

class TableViewCell: UITableViewCell {

@IBOutlet weak var sliderLabel: UILabel!
@IBOutlet weak var slider: UISlider!

override func awakeFromNib() {
super.awakeFromNib()
// Initialization code

}

override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

// Configure the view for the selected state
}

最佳答案

将方法重构为此,请注意,更新代码是异步的,您必须将更改的数据反射(reflect)到表数据源数组并在其成功部分中重新加载表

 @objc func sliderChange(sender: UISlider) {

let currentValue = Int(sender.value)
let row = sender.tag
let Id = array[row].documentID

let userRef = db.collection("Users").document(user!)
userRef.collection("Friends").document(Id).updateData(["number" : currentValue]) {
error in
if let error = error {
print("Error adding document: \(error.localizedDescription)")
} else {
print(currentValue)
array[indexPath.row].number = sender.value // set it according to type of number property
self.tableView.reloadData()
}

}

}

关于swift - Firestore - UITableViewCell 内的 UISlider,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50777689/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com