如何在tableView中对单元格进行排序?

时间:2018-02-08 15:56:34

标签: ios swift uitableview sorting uilabel

如何在tableView中对单元格进行排序?

我有结构和数组:

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 func中的

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

    }

但它不起作用......

我的问题是什么?

2 个答案:

答案 0 :(得分:5)

首先,您必须将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()
}

答案 1 :(得分:0)

在:

let itemSort = converterAtmo
itemSort.sorted { $0.title < $1.title }

您实际上并没有对数组进行排序。你正在'itemSort'中复制它而不用它做任何事情。