我有一个带有简单数据的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的属性。 (不是情节提要)
一些屏幕截图:
经过一天的搜索和尝试,我实际上不确定这一点,因为有些方法有效,但有些方法却无效。例如:
这有效:
navigationItem.searchController?.searchBar.tintColor = .white
这不起作用:
navigationItem.searchController?.searchBar.barTintColor = .red
那我为什么可以访问一个财产而不能访问其他财产? 这是一个非常简单的功能,但是很难找到。
也许您可以为我提供一些可用于我的案例的资源(如图片所示)? 或者,如果您有时间-一些解决方案,也许是示例。
谢谢。
将继续搜索。