Пока это мой код.UISearchBar и UITableView отображаются.Но автозаполнение не работает.Я использую код на этой ссылке на GitHub.Эта ссылка использует раскадровку, и я пытаюсь сделать это программно.MKLocalSearchCompleterDelegate имеет данные, но они не отображаются при просмотре таблицы.Это мой код:
class PlacesBottomSheetViewController: UIViewController, UISearchBarDelegate {
//inits here
var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()
let searchResultsTableView = UITableView()
override func viewDidLoad() {
view.backgroundColor = .black
view.addSubview(toSearchBar)
setupTableView()
searchCompleter.delegate = self
}
func setupTableView() {
view.addSubview(searchResultsTableView)
searchResultsTableView.translatesAutoresizingMaskIntoConstraints = false
searchResultsTableView.topAnchor.constraint(equalTo: view.topAnchor, constant: 60.0).isActive = true
searchResultsTableView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
searchResultsTableView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
searchResultsTableView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
}
lazy var toSearchBar: UISearchBar = {
let toBar = UISearchBar()
toBar.searchBarStyle = UISearchBar.Style.prominent
toBar.delegate = self
return toBar
}()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchCompleter.queryFragment = searchText
}
}
MKLocalSearchCompleterDelegate, используемый в расширении
extension PlacesBottomSheetViewController: MKLocalSearchCompleterDelegate {
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
searchResults = completer.results
searchResultsTableView.reloadData()
}
}
UITableViewDataSource и UITableViewDelegate в расширении
extension PlacesBottomSheetViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return searchResults.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let searchResult = searchResults[indexPath.row]
let cell = UITableViewCell(style: .subtitle, reuseIdentifier: nil)
cell.textLabel?.text = searchResult.title
cell.detailTextLabel?.text = searchResult.subtitle
return cell
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
}
extension PlacesBottomSheetViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
let completion = searchResults[indexPath.row]
let searchRequest = MKLocalSearch.Request(completion: completion)
let search = MKLocalSearch(request: searchRequest)
search.start { (response, error) in
//....response
}
}
}