如何对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 使单元格附件视图消失?

如何对要添加到先前单元格顶部或先前单元格底部的单元格进行排序

如何将uicollectionview单元格合并到tableview第一个单元格上