如何对tableView中的单元格进行排序?
Posted
技术标签:
【中文标题】如何对tableView中的单元格进行排序?【英文标题】:How to sort cells in tableView? 【发布时间】:2018-02-08 15:56:34 【问题描述】:我有结构和数组:
struct Converter
let title: String
let kf: Double
let converterAtmo = [
Converter(title: "Атмосферы", kf: 1),
Converter(title: "Бары", kf: 365.2422),
Converter(title: "Мм.рт.ст.", kf: 11.999998),
Converter(title: "Паскали", kf: 525948.77),
Converter(title: "Фунт./кв.дюйм", kf: 52.177457)]
在CellAtRow
函数中:
let cell1 = tableView.dequeueReusableCell(withIdentifier: "resultCell") as! resultTableViewCell
let item = converterAtmo[indexPath.row]
cell1.nameResult.text = item.title
cell1.labelResult.text = String(item.kf * atmosfera)
return cell1
最后是@IBAction
:
@IBAction func sortAlphabet(_ sender: Any)
let itemSort = converterAtmo
itemSort.sorted $0.title < $1.title
self.tableView2.reloadData()
但它不起作用......
我的问题是什么?
【问题讨论】:
这在您的代码之外不容易重现。 【参考方案1】:首先,您必须将converterAtmo
声明为var
而不是let
,以便您可以修改它。
然后替换:
itemSort.sorted $0.title < $1.title
与:
self.converterAtmo = itemSort.sorted $0.title < $1.title
在您当前的实现中,您对模型的副本进行排序(itemSort
只是您的self.converterAtmo
的副本),因此它对 tableView 后面的模型没有任何影响。您需要将该排序后的数组设置回 tableView 数据模型。
或者更好,你可以使用这个:
@IBAction func sortAlphabet(_ sender: Any)
// `sort` method will sort the converterAtmo (`sorted` method leaves the original
// array untouched and returns a sorted copy)
self.converterAtmo.sort $0.title < $1.title
self.tableView2.reloadData()
【讨论】:
【参考方案2】:在:
let itemSort = converterAtmo
itemSort.sorted $0.title < $1.title
您实际上并没有对数组进行排序。您正在将其复制到“itemSort”中,而没有对其进行任何操作。
【讨论】:
以上是关于如何对tableView中的单元格进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
如何将当前单元格中的数据与 TableView Swift 4 中的前一个单元格进行比较?
从 tableView 中的 Firestore 单元格读取数据后随机重新排序
Swift:Tableview 中特定单元格中的 addSublayer 不是每个单元格
tableview 上的 setediting = true 使单元格附件视图消失?