Czekam na możliwość dołączenia osobistej lokalizacji do MKLocationSearchCompletion
array
, którą można znaleźć, gdy użytkownik przeszukuje pasek wyszukiwania. Mam jednak problem ze zrozumieniem, jak elementy są przechowywane w obiektach i czy mogę dodać obiekt oznaczenia miejsca (lub informacje o lokalizacji) do obiektu MKLocationSearch
. To, co udało mi się uzyskać z dokumentacji, polega na tym, że obiekt MKLocalSearchCompleter
przechowuje łańcuchy, do których uzyskuje się dostęp, gdy użytkownik wpisuje częściowe ciągi znaków w pasku wyszukiwania. Ale nie jestem pewien, gdzie mogę uzyskać dostęp do tej tablicy i dodawać nowe lokalizacje.Dodawanie elementów do obiektów
Oto jak kod jest tak skonstruowane, aby wyświetlić wyniki ukończenia Szukaj:
var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()
@IBOutlet weak var searchBar: UISearchBar!
override func viewDidLoad() {
searchCompleter.delegate = self
searchBar.delegate = self
}
extension ViewController: MKLocalSearchCompleterDelegate {
func completerDidUpdateResults(_ completer: MKLocalSearchCompleter) {
searchResults = completer.results
searchResultsTableView.reloadData()
}
func completer(_ completer: MKLocalSearchCompleter, didFailWithError error: Error) {
// handle error
}
}
extension ViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
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?.attributedText = highlightedText(searchResult.title, inRanges: searchResult.titleHighlightRanges, size: 17.0)
cell.detailTextLabel?.attributedText = highlightedText(searchResult.subtitle, inRanges: searchResult.subtitleHighlightRanges, size: 12.0)
return cell
}
}
extension ViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchCompleter.queryFragment = searchText
}
func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
self.searchBar.endEditing(true)
searchBar.resignFirstResponder()
return true
}
}
Mam problemy ze zrozumieniem, kiedy wykonywana jest instrukcja switch. Kiedy wywoływana jest funkcja cellForRowAtIndexPath, każdy wiersz widoku table wykona instrukcję switch right? Jestem w stanie dodać .customResult do searchResults; jednak gdy szukam z paska wyszukiwania, wynik niestandardowy się nie pojawia. – Kevin