2016-07-13 16 views
5

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?

+0

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

Antwort

1

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.

+0

Ich tat das aber ich bekam NSExceptions, obwohl ich UICollectionViewDelegate und UICollectionViewDataSource implementierte –

+0

Was war die Ausnahme? –

18

CollectionView + SearchBar mit Swift3 + Storyboard Implementierung.

Erstellen der Kopfansicht:

Creating the Header View

Erstellen der Suchleiste:

Creating the Search Bar

Erstellen Sie die wiederverwendbare Ansicht benutzerdefinierte Klasse

Create the reusable view custom class

Stellen Sie die wiederverwendbare Ansicht benutzerdefinierte Klasse

Set the reusable view custom class

Erstellen Sie die Suchleiste Ausgang

Create the search bar outlet in custom class

Trick: Verbinden Sie die Suche Bar Delegierter COLLECTION VIEW Klasse, geht die Suchleiste Ausgang zum CUSTOM REUSABLE ANSICHT DER KLASSE

Connect the search bar delegate to collection view class

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() 
    } 
} 
+4

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

Verwandte Themen