Ich habe meine Suchleiste programmatisch implementiert. Für das Standardverhalten in einer Tabellenansicht habe ich es geschafft, es in der Header-Ansicht arbeiten zu lassen. Nun, ich versuche die gleiche Implementierung in einer CollectionView und ich kann nicht scheinen, damit es funktioniert. Jede Hilfe, die es verdient, wird geschätzt, da ich jetzt seit einigen Tagen kämpfe. Ich veröffentliche die gesamte View-Controller, falls ich bin etwas fehlt:Programmatische Suchleiste in Sammlungsansicht Implementierungsprobleme
import UIKit
import Firebase
import FirebaseDatabase
class NHSTrustSearchData: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource, UISearchBarDelegate {
var setupNHSTSD = SetupNHSTSD()
var nhsTrusts = [NhsTrust]()
var nhsTrustsFiltered = [NhsTrust]()
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() {
super.viewDidLoad()
// Initialize the window
let window = UIWindow.init(frame: UIScreen.main.bounds)
window.makeKeyAndVisible()
setupNHSTSD.nhsTrustSearchData = self
setupNHSTSD.setupViews()
setupNHSTSD.collectioViewSetup()
setupBasicNavigationForSocialHealthcare()
setupNHSTSD.collectionView.dataSource = self as UICollectionViewDataSource
setupNHSTSD.collectionView.delegate = self
setupNHSTSD.collectionView.register(NHSTrustCell.self, forCellWithReuseIdentifier: "NHSTustCell")
setupNHSTSD.searchBar.delegate = self
navigationItem.title = "Choose NHS Trust"
print("User role remains: \(currentUserRole)")
fetchQuestions()
searchController.searchResultsUpdater = self as UISearchResultsUpdating
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
setupNHSTSD.searchBar = searchController.searchBar
}
func filterContentForSearchText(searchText: String, scope: String = "All") {
nhsTrustsFiltered = nhsTrusts.filter { trust in
return trust.nhsTrustName.localizedLowercase.contains(searchText.localizedLowercase)
}
setupNHSTSD.collectionView.reloadData()
}
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if searchController.isActive && searchController.searchBar.text != "" {
return nhsTrustsFiltered.count
}
return nhsTrusts.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "NHSTustCell", for: indexPath) as! NHSTrustCell
cell.backgroundColor = .white
cell.layer.borderColor = UIColor(white: 0.5, alpha: 0.3).cgColor
cell.layer.borderWidth = 0.3
let trust : NhsTrust
if searchController.isActive && searchController.searchBar.text != "" {
trust = nhsTrustsFiltered[indexPath.row]
} else {
trust = nhsTrusts[indexPath.row]
}
cell.nhsTrustName.text = trust.nhsTrustName
return cell
}
}
extension NHSTrustSearchData: UISearchResultsUpdating {
@available(iOS 8.0, *)
func updateSearchResults(for searchController: UISearchController) {
filterContentForSearchText(searchText: searchController.searchBar.text!)
}
func updateSearchResultsForSearchController(searchController: UISearchController) {
filterContentForSearchText(searchText: searchController.searchBar.text!)
}
}