集合视图实现问题中的编程搜索栏
问题描述:
我以编程方式实现了我的搜索栏。对于表视图中的默认行为,我设法使其在标题视图中工作。现在,我正在尝试在一个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!)
}
}
答
我找到了解决方案,它是如此简单。 我放在一个观点作为支撑,只是增加了searchController作为一个子视图:
setupNHSTSD.viewForSearch.addSubview(searchController.searchBar)
如果你要拿出搜索栏,你可以的背景图像,只需使用:
//remove searchBar background image
for subView in searchController.searchBar.subviews {
for view in subView.subviews {
if view.isKind(of: NSClassFromString("UISearchBarBackground")!) {
let imageView = view as! UIImageView
imageView.removeFromSuperview()
}
}
}