Ich möchte Benutzern meiner App erlauben, Bilder mit einem UISearchBar
über einem UICollectionView
zu suchen. Nach meinem Verständnis muss ein UICollectionView
in einem UICollectionViewController
ordnungsgemäß funktionieren. Xcode lässt mich jedoch keine Suchleiste in eine UICollectionViewController
setzen. Ich kann auch kein generisches UIViewController
verwenden, da die Sammlungsansicht nicht ordnungsgemäß funktioniert. Wie kann ich die Funktionalität erreichen, die ich möchte?Wie kann ich eine Suchleiste oberhalb einer UICollectionView hinzufügen?
Antwort
UICollectionView
innerhalb UICollectionViewController
ist nicht zwingend erforderlich. UICollectionView
ist wie UITableView
und kann überall hinzugefügt werden. Alles, was Sie tun müssen, ist die Implementierung der Protokolle UICollectionViewDelegate
und UICollectionViewDataSource
. Sie können dem folgenden Lernprogramm Supplementary Header folgen und Suchleiste als zusätzlichen Header von UICollectionView
hinzufügen.
Ich tat das aber ich bekam NSExceptions, obwohl ich UICollectionViewDelegate und UICollectionViewDataSource implementierte –
Was war die Ausnahme? –
CollectionView + SearchBar mit Swift3 + Storyboard Implementierung.
Erstellen der Kopfansicht:
Erstellen der Suchleiste:
Erstellen Sie die wiederverwendbare Ansicht benutzerdefinierte Klasse
Stellen Sie die wiederverwendbare Ansicht benutzerdefinierte Klasse
Erstellen Sie die Suchleiste Ausgang
Trick: Verbinden Sie die Suche Bar Delegierter COLLECTION VIEW Klasse, geht die Suchleiste Ausgang zum CUSTOM REUSABLE ANSICHT DER KLASSE
die Collectionkopfmethode Protokoll implementieren
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()
}
die Searchbar Delegierten Set
class MyCollectionViewController: (other delegates...), UISearchBarDelegate {
Und schließlich wird Ihr die Suchleiste Delegatmethoden in Ihrer Klasse Collection
//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()
}
}
Leider hat dieser Ansatz ein paar Nebenwirkungen; Die Suchleiste erscheint in jedem Abschnittskopf, die Suchleiste wird aus der Ansicht herausscrollen, und die Suchleiste verliert ihren ersten Antwortsstatus, wenn self.collectionView? .reloadData() aufgerufen wird. Schauen Sie sich Jeremiah-de Schritt für Schritt Repo für die Verwendung von UISearchController mit UICollectionView https://github.com/jeremiah-de/CollectionViewSearch/tree/basic-collection-view – aumansoftware
finden Sie den folgenden Link aufgerufen werden, dies hilft Ihnen kann. [beispiel-how-to-integrate-uicollectionview-mit-uisearchbar -1] (https://maniacdev.com/2015/01/example-how-to-integrate-uicollectionview-with-uisearchbar) – Chandan