首页 文章

Firestore - UITableViewCell中的UISlider

提问于
浏览
0

我在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
}

1 回答

  • 0

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

    @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()  
            }
    
        }
    
    }
    

相关问题