Как добавить строку поиска над UICollectionView?

Я хотел бы разрешить пользователям моего приложения искать изображения с помощью UISearchBar выше UICollectionView. Согласно моему пониманию, a UICollectionView должен быть UICollectionViewController для правильной работы. Однако Xcode не позволит мне поместить строку поиска в UICollectionViewController. Я также не могу использовать generic UIViewController поскольку представление коллекции не будет работать должным образом. Как я могу достичь желаемой функциональности?

2 ответов


CollectionView + Панель Поиска С Swift3 + Раскадровка реализация.

создание вида заголовка:

Creating the Header View

создание строки поиска:

Creating the Search Bar

создайте пользовательский класс представления многоразового использования

Create the reusable view custom class

установите пользовательский вид для повторного использования класс!--5-->

Set the reusable view custom class

Создать панель поиска outlet

Create the search bar outlet in custom class

трюк: подключите делегат панели поиска к классу представления коллекции, выход панели поиска переходит к пользовательскому многоразовому классу представления

Connect the search bar delegate to collection view class

реализуйте метод заголовка CollectionView протокола

    override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {

         if (kind == UICollectionElementKindSectionHeader) {
             let headerView:UICollectionReusableView =  collectionView.dequeueReusableSupplementaryView(ofKind: UICollectionElementKindSectionHeader, withReuseIdentifier: "CollectionViewHeader", for: indexPath)

             return headerView
         }

         return UICollectionReusableView()

    }

установить делегат панели поиска

    class MyCollectionViewController: (other delegates...), UISearchBarDelegate {

и, наконец, ваши методы делегата строки поиска будут вызываться в вашем классе CollectionView

//MARK: - SEARCH

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
    if(!(searchBar.text?.isEmpty)!){
        //reload your data source if necessary
        self.collectionView?.reloadData()
    }
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if(searchText.isEmpty){
        //reload your data source if necessary
        self.collectionView?.reloadData()
    }
}

Не обязательно иметь UICollectionView внутри UICollectionViewController. UICollectionView Как UITableView и может быть добавлен в любом месте. Все, что вам нужно сделать, это реализовать UICollectionViewDelegate и UICollectionViewDataSource протоколов. Вы можете следовать следующему учебнику Дополнительный Заголовок и добавить строку поиска в качестве дополнительного заголовка UICollectionView.