排序集合视图项

时间:2020-03-22 19:07:00

标签: ios swift uicollectionview

我正在开发一个iOS应用,该应用可以在集合视图中显示项目。

我在视图中包含了一个分段控件,该控件应该可以根据不同的条件对项目进行排序。

它是这样的:

@IBAction func filtros(_ sender: Any) {

    let getIndex = sc.selectedSegmentIndex
    switch (getIndex) {
    case 0:
        print("barato")
        print(dispositivosTodos)
        var dispositivos_barato = [Dispositivos]()
        dispositivos_barato = dispositivosTodos.sorted(by: { $0.precio_dispositivo < $1.precio_dispositivo })
        print(dispositivos_barato)
        case 1:
        print("caro")


        case 2:
        print("reciente")
        case 3:
        print("cercano")
    default:
        print("no filtro")
    }
}

为了进行测试,我实现了第一种情况,即按商品价格对商品价值进行排序。

现在,我的问题是如何更新集合视图以显示已排序的项目?

1 个答案:

答案 0 :(得分:1)

您想要做的是创建一个新的类级别的var,它将保存已排序的数组。然后让您的collectionView使用 那个 数组作为数据。

将此添加到您的班级中:

// original array
var dispositivosTodos: [Dispositivos] = [Dispositivos]()

// this will hold the sorted array
var dispositivosSorted: [Dispositivos] = [Dispositivos]()

并将您的cellForItemAt更改为以下内容:

override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath)
    // use Sorted array, not Todos array
    cell.myData = dispositivosSorted[indexPath.item]
    return cell
}

和您的filters()函数将更改为以下内容:

@IBAction func filtros(_ sender: Any) {

    guard let sc = sender as? UISegmentedControl else { return }

    let getIndex = sc.selectedSegmentIndex
    switch (getIndex) {
    case 0:
        print("barato")
        dispositivosSorted = dispositivosTodos.sorted(by: { $0.precio_dispositivo < $1.precio_dispositivo })

    case 1:
        print("caro")
        dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyB_dispositivo < $1.propertyB_dispositivo })

    case 2:
        print("reciente")
        dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyC_dispositivo < $1.propertyC_dispositivo })

    case 3:
        print("cercano")
        dispositivosSorted = dispositivosTodos.sorted(by: { $0.propertyD_dispositivo < $1.propertyD_dispositivo })

    default:
        print("no filtro")
        dispositivosSorted = dispositivosTodos
    }

    collectionView.reloadData()
}