如何根据详细文本标签中的值对表格视图单元格进行排序?我在Firebase中有姓名和分数,我已经退出并希望按照从最高到最低分的顺序显示。
目前,我正在检索Firebase名称和值,但它们只是按主文本字段中名称的字母顺序显示。我尝试使用{$0.scoreTotal > $1.scoreTotal}
按分数值排序,并使用queryOrdered(byChild: "scoreTotal")
对Firebase数据进行排序,但似乎都不起作用。
这是代码的表格视图部分:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "CellMale", for: indexPath as IndexPath)
let comp = comps[indexPath.row]
self.comps.sorted(by: {$0.scoreTotal > $1.scoreTotal})
let dbRef1 = FIRDatabase.database().reference().child("Live Scoring Male/\(String(describing: comp.name!))/scoreTotal")
dbRef1.queryOrdered(byChild: "scoreTotal").observe(FIRDataEventType.value, with: { (snapshot) in
let scoreTotal = snapshot.value as! Double
cell.detailTextLabel?.text = String(scoreTotal)
})
cell.textLabel?.text = comp.name
return cell
}
答案 0 :(得分:0)
首先,永远不要将任何服务调用到cellForRowAtIndex
并在需要时调用它,就像我们加载视图时使用viewDidLoad()
方法将任何数据加载到该控制器中一样。
所以请将上述方法调入viewDidLoad
并将数据排序
使用如下所示的FireBase排序:
let ref = FIRDatabase.database().reference(fromURL: <FIREBASE_URL>).child("topics")
let query = ref.queryOrdered(byChild: "scores")
query.observe(.value, with: { (snapshot) in
for childSnapshot in snapshot.children {
print(childSnapshot)
}
})
将其捕获到Local Array或Dictionary中,并使用reloadData()
方法在TableView中使用它。