编程搜索栏中的集合视图实现问题

时间:2017-08-02 21:15:38

标签: ios swift swift3 uikit uisearchbar

我以编程方式实现了我的搜索栏。对于表视图中的默认行为,我设法使其在标题视图中工作。现在,我在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!)
    }
}

1 个答案:

答案 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()
            }
        }
    }