9
我期望能夠將個人位置追加到MKLocationSearchCompletion
array
中,當用戶搜索搜索欄時可以找到該位置。但是,我無法理解項目如何存儲到對象中,以及我是否可以將地標對象(或位置信息)添加到MKLocationSearch
對象中。我能從文檔中獲得的是MKLocalSearchCompleter
對象存儲當用戶在部分字符串中輸入搜索欄時訪問的字符串。但我不確定我可以在哪裏訪問這個數組並添加新的位置。將項目添加到對象
下面是代碼是如何組織的,以顯示搜索結果完成:
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
}
}
我無法理解何時執行switch語句。當調用cellForRowAtIndexPath時,tableview的每一行都會執行switch語句嗎?我可以將.customResult附加到searchResults中;但是,當我使用搜索欄進行搜索時,自定義結果不顯示。 – Kevin