更新 - 我创建了一个简单的示例项目here https://github.com/gm6379/MapKitAutocomplete使用 Swift 3 作为原始答案是用 Swift 2 编写的。
在 iOS 9.3 中,一个新类称为MKLocalSearchCompleter
引入后,这允许创建自动完成解决方案,您只需传入 queryFragment 即可,如下所示:
var searchCompleter = MKLocalSearchCompleter()
searchCompleter.delegate = self
var searchResults = [MKLocalSearchCompletion]()
searchCompleter.queryFragment = searchField.text!
然后使用以下方法处理查询结果MKLocalSearchCompleterDelegate
:
extension SearchViewController: MKLocalSearchCompleterDelegate {
func completerDidUpdateResults(completer: MKLocalSearchCompleter) {
searchResults = completer.results
searchResultsTableView.reloadData()
}
func completer(completer: MKLocalSearchCompleter, didFailWithError error: NSError) {
// handle error
}
}
并以适当的格式显示地址结果:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> 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
}
然后您可以使用MKLocalCompletion
实例化一个对象MKLocalSearch.Request
,从而获得访问MKPlacemark
以及所有其他有用的数据:
let searchRequest = MKLocalSearch.Request(completion: completion!)
let search = MKLocalSearch(request: searchRequest)
search.startWithCompletionHandler { (response, error) in
if error == nil {
let coordinate = response?.mapItems[0].placemark.coordinate
}
}