Я хочу, чтобы пользователи моего приложения могли искать изображения с помощью UISearchBar
выше UICollectionView
. По моему мнению, UICollectionView
должен быть в UICollectionViewController
для правильной работы. Однако Xcode не позволит мне помещать строку поиска в UICollectionViewController
. Я также не могу использовать общий UIViewController
, поскольку представление коллекции не будет работать должным образом. Как я могу достичь желаемой функциональности?
Как добавить панель поиска над UICollectionView?
Ответ 1
CollectionView + SearchBar с реализацией Swift3 + Storyboard.
Создание заголовка:
Создание панели поиска:
Создать пользовательский класс с возможностью повторного использования
Задайте класс пользовательского класса многократного использования
Создать выход в строку поиска
Trick: Подключите делегат панели поиска к классу COLLECTION VIEW, выход в строку поиска появится в CUSTOM REUSABLE 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()
}
}
Ответ 2
Не обязательно иметь UICollectionView
внутри UICollectionViewController
. UICollectionView
аналогичен UITableView
и может быть добавлен в любом месте. Все, что вам нужно сделать, это реализовать протоколы UICollectionViewDelegate
и UICollectionViewDataSource
. Вы можете следовать следующему руководству Дополнительный заголовок и добавить строку поиска в качестве дополнительного заголовка UICollectionView
.
Ответ 3
Пройдите мой проект, приведенный ниже
Посетите https://github.com/Ayush21082/CollectionViewSearcher