У меня есть viewController с двумя коллекциями ViewView, один segmentedControl и одна панель поиска.
Первый collectionView содержит ветви мобильных телефонов, такие как Apple, Samsung и др. c. Каждый элемент показывает только значок ветви. Второй collectionView содержит устройства мобильных телефонов, которые нужно выбрать для их покупки.
Сегментированный элемент управления имеет четыре секции, которые используются для сортировки мобильных устройств в зависимости от различных параметров, таких как, цена, дата и расстояние до пользователя. Панель поиска используется для фильтрации устройств в зависимости от строки поиска.
Теперь мне нужно отфильтровать устройства в зависимости от элемента ветви, выбранного в первом наборе collectionView.
Здесь у вас есть мой текущий код .
Сортировка в зависимости от выбранного сегментированного элемента управления (работает):
@ IBAction fun c фильтро (_ отправитель: любой) {
охранник пусть с c = отправитель как? UISegmentedControl else {return}
let getIndex = sc.selectedSegmentIndex
switch (getIndex) {
case 0:
print("barato")
dispositivosSorted.sort(by: {$0.precio_dispositivo.compare($1.precio_dispositivo, options: .numeric) == .orderedAscending})
case 1:
print("caro")
dispositivosSorted.sort(by: {$0.precio_dispositivo.compare($1.precio_dispositivo, options: .numeric) == .orderedDescending})
case 2:
dispositivosSorted.sort(by: {$0.fecha_dispositivo.compare($1.fecha_dispositivo, options: .numeric) == .orderedDescending})
case 3:
print("cercano")
dispositivosSorted.sort(by: {$0.distancia.compare($1.distancia, options: .numeric) == .orderedDescending})
default:
print("no filtro")
}
collectionViewDispositivos.reloadData()
}
Фильтрация элементов в зависимости от строки поиска (также работает):
fun c searchBar (_ searchBar: UISearchBar, textDidChange searchText: String) {
if searchBar.text == nil || searchBar.text == "" {
filtrados = false
collectionViewDispositivos.reloadData()
}
else {
filtrados = true
let buscado = searchBar.text!.lowercased()
dispositivosFiltrados = dispositivosSorted.filter({$0.modelo_del_dispositivo.lowercased().contains(buscado) })
collectionViewDispositivos.reloadData()
}
}
И это мое предложение отфильтровать устройства после выбора элемента при первом collectionView (не работает):
fun c collectionView (_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
если collectionView == self.collectionViewMarcas {
dispositivosSorted.filter { $0.modelo_dispositivo.contains(marcas[indexPath.row].nombre) }
collectionViewDispositivos.reloadData()
}}