我正在开发一个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")
}
}
为了进行测试,我实现了第一种情况,即按商品价格对商品价值进行排序。
现在,我的问题是如何更新集合视图以显示已排序的项目?
答案 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()
}