Сортировка элементов коллекции - PullRequest
0 голосов
/ 22 марта 2020

Я разрабатываю приложение 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 Ответ

1 голос
/ 22 марта 2020

То, что вы хотите сделать, это создать новую переменную уровня класса, которая будет содержать отсортированный массив. Затем пусть ваш 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() веселье c будет изменено на что-то вроде этого:

@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()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...