Desidero consentire agli utenti della mia app di cercare immagini utilizzando uno UISearchBar
sopra un UICollectionView
. Secondo la mia comprensione, un UICollectionView
deve essere in un UICollectionViewController
per funzionare correttamente. Tuttavia, Xcode non mi consente di inserire una barra di ricerca in un UICollectionViewController
. Inoltre, non è possibile utilizzare un UIViewController
generico in quanto la vista raccolta non funzionerà correttamente. Come posso ottenere la funzionalità che voglio?Come posso aggiungere una barra di ricerca sopra un UICollectionView?
risposta
Non è obbligatorio avere UICollectionView
all'interno di UICollectionViewController
. UICollectionView
è come UITableView
e può essere aggiunto ovunque. Tutto ciò che devi fare è implementare i protocolli UICollectionViewDelegate
e UICollectionViewDataSource
. È possibile seguire il seguente tutorial Supplementary Header e aggiungere la barra di ricerca come intestazione supplementare di UICollectionView
.
Ho fatto quello ma ricevevo NSExceptions anche se ho implementato UICollectionViewDelegate e UICollectionViewDataSource –
Qual è stata l'eccezione? –
CollectionView + SearchBar con Implementazione Swift3 + Storyboard.
Creare l'intestazione Vista:
Creazione della barra di ricerca:
creare la vista riutilizzabile classe personalizzata
Impostare la vista riutilizzabile personalizzato classe
Creare presa barra di ricerca
Trucco: collegare la ricerca bar delegato alla classe di raccolta VIEW, presa barra di ricerca va al VIEW classe personalizzata REUSABLE
Implementare il metodo intestazione CollectionView del protocollo
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()
}
Impostare il delegato Searchbar
class MyCollectionViewController: (other delegates...), UISearchBarDelegate {
E, infine, i vostri metodi delegato barra di ricerca saranno chiamati nel vostro CollectionView Classe
//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()
}
}
Sfortunatamente questo approccio ha alcuni effetti collaterali; la barra di ricerca apparirà in ogni intestazione della sezione, la barra di ricerca scorrerà fuori dalla vista e la barra di ricerca perderà il suo stato FirstResponder quando viene chiamato self.collectionView? .reloadData(). Dai un'occhiata a Jeremiah-de repo step by step per l'utilizzo di UISearchController con UICollectionView https://github.com/jeremiah-de/CollectionViewSearch/tree/basic-collection-view – aumansoftware
trovare il link in basso, questo può aiutare. [esempio-come-integrare-uicollectionview-con-uisearchbar -1] (https://maniacdev.com/2015/01/example-how-to-integrate-uicollectionview-with-uisearchbar) – Chandan