Swift программно - MapKit Автозаполнение - PullRequest
0 голосов
/ 24 сентября 2019

Пока это мой код.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
    }
}
}
...