Firestore - UITableViewCell 内的 UISlider
Posted
技术标签:
【中文标题】Firestore - UITableViewCell 内的 UISlider【英文标题】:Firestore - UISlider inside UITableViewCell 【发布时间】:2018-06-09 19:18:38 【问题描述】:我在 tableView 的自定义单元格中有一个 UISlider。在单元格中还有一个显示滑块值的 UILabel。目前我已经得到它,这样我就可以将滑块值更新到 firestore 并更新到标签中。但是,当我离开屏幕/应用程序并再次加载屏幕时,我无法将以前的滑块值加载到滑块中。我仍然可以更新滑块值,它仍然会转移到 Firestore,一切正常。我尝试在首次启动屏幕时将值从 firestore 加载到滑块中,效果很好,但是当我这样做时它不允许我更新屏幕上的滑块,但它确实会在 firestore 上更新。最完美的是,当首次加载屏幕时从 firestore 加载数据,然后我可以更新滑块,它将在应用程序和 firestore 上运行。任何帮助将不胜感激!非常感谢!!
视图控制器
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】:将方法重构为此,请注意更新代码是异步的,您必须将更改的数据反映到表数据源数组并在其成功部分重新加载表
@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()
【讨论】:
完美运行!非常感谢!! ?以上是关于Firestore - UITableViewCell 内的 UISlider的主要内容,如果未能解决你的问题,请参考以下文章
React Native重复超时将集合写入firestore@firebase/firestore:Firestore(8.4.2):连接WebChannel传输错误
@firebase/firestore:Firestore (5.0.4):无法访问 Cloud Firestore 后端。后端在 10 秒内没有响应
Expo + firebase@9.0.1/9.0.0: @firebase/firestore:, Firestore (9.0.0): 无法到达 Cloud Firestore 后端