Как добавить строку поиска над UICollectionView?
Я хотел бы разрешить пользователям моего приложения искать изображения с помощью UISearchBar
выше UICollectionView
. Согласно моему пониманию, a UICollectionView
должен быть UICollectionViewController
для правильной работы. Однако Xcode не позволит мне поместить строку поиска в UICollectionViewController
. Я также не могу использовать generic UIViewController
поскольку представление коллекции не будет работать должным образом. Как я могу достичь желаемой функциональности?
2 ответов
CollectionView + Панель Поиска С Swift3 + Раскадровка реализация.
создание вида заголовка:
создание строки поиска:
создайте пользовательский класс представления многоразового использования
установите пользовательский вид для повторного использования класс!--5-->
Создать панель поиска outlet
трюк: подключите делегат панели поиска к классу представления коллекции, выход панели поиска переходит к пользовательскому многоразовому классу представления
реализуйте метод заголовка 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
.