我以编程方式实现了我的搜索栏。对于表视图中的默认行为,我设法使其在标题视图中工作。现在,我在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!)
}
}
答案 0 :(得分:0)
我找到了解决方案,而且非常简单。 我将视图作为支持放置,并将searchController添加为subView:
setupNHSTSD.viewForSearch.addSubview(searchController.searchBar)
如果你想取出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()
}
}
}