导航控制器中的UISearchController / SearchBar

时间:2018-08-01 13:20:28

标签: swift

我有一个带有简单数据的TableView。我已通过代码将SearchBar添加到导航控制器。 (不确定我是否做过正确的方法,但是它正在工作)。看起来是这样:

代码如下:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    var data = ["Hello","This","Is","Table","View","With","Search","Bar","Included","In","NavBar","But","SearchBar","Is","Not","Done","Properly"]
    var filtered = [String]()
    override func viewDidLoad() {
        super.viewDidLoad()
        //My original array and filtered arrays.
        filtered = data
        // Here a play with preferences add/delete 
        let searchBar = UISearchController(searchResultsController: nil)
        navigationController?.navigationBar.prefersLargeTitles = true
        navigationItem.searchController = searchBar
       navigationItem.searchController?.dimsBackgroundDuringPresentation = false
        navigationItem.searchController?.searchResultsUpdater = self
        navigationItem.hidesSearchBarWhenScrolling = false
    }
}

extension ViewController: UITableViewDataSource, UITableViewDelegate {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return filtered.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell()
        cell.textLabel?.text = filtered[indexPath.row]
        return cell
    }

}

extension ViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        if searchController.searchBar.text! == "" {
            filtered = data
        }
        else {
            filtered = data.filter  {$0.lowercased().contains(searchController.searchBar.text!.lowercased())}
            }
        self.tableView.reloadData()
    }

}

如您所见,我已经通过创建SearchController并将其添加到NavController来做到这一点。 还实现了委托 UISearchResultsUpdating 方法来进行搜索和过滤。

我尝试了几种方法,但是我不知道如何访问SearchBar和NavController的属性。 (不是情节提要)

一些屏幕截图:

enter image description here enter image description here

经过一天的搜索和尝试,我实际上不确定这一点,因为有些方法有效,但有些方法却无效。例如:

这有效:

navigationItem.searchController?.searchBar.tintColor = .white

这不起作用:

navigationItem.searchController?.searchBar.barTintColor = .red

那我为什么可以访问一个财产而不能访问其他财产? 这是一个非常简单的功能,但是很难找到。

也许您可以为我提供一些可用于我的案例的资源(如图片所示)? 或者,如果您有时间-一些解决方案,也许是示例。

谢谢。

将继续搜索。

0 个答案:

没有答案