0
私は検索バーをプログラマチックに実装しました。テーブルビューのデフォルトの動作では、ヘッダビューで動作させることができました。今、私はcollectionViewで同じ実装を試しているし、私はそれを動作させるように見えることはできません。私はかなりの数日間苦労してきたので、それが一致しているすべての助けに感謝します。 私は何か欠けていただく場合には、全体のビューコントローラを掲載しています:私は解決策を見つけたコレクションビューのプログラム検索バーの実装の問題
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!)
}
}