我在tableView的自定义单元格中有一个UISlider。在单元格中,还有一个显示滑块值的UILabel。现在我得到了它,这样我就可以更新滑块的值到firestore,也可以更新到标签。然而,当我离开屏幕/应用程序并再次加载屏幕时,我无法将以前的滑块值加载到滑块中。我仍然可以更新滑块的值,它仍然会转移到firestore,一切工作正常。我尝试过在屏幕第一次启动时将来自firestore的值加载到滑块中,它工作得很好,但它不允许我在执行此操作时更新屏幕上的滑块,但它确实会在firestore上更新。完美的是,当屏幕第一次加载时,数据是从firestore加载的,然后我可以更新滑块,它将在应用程序和firestore中工作。任何帮助都将不胜感激!非常感谢!
ViewController
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
}
发布于 2018-06-10 03:31:00
请注意,更新代码是异步的,您必须将更改后的数据反映到表数据源数组中,并在表的成功部分中重新装入表
@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()
}
}
}
https://stackoverflow.com/questions/50777689
复制相似问题