0
我正在寻找在使用本机iOS功能的地图页面中实现搜索完成。我发现this answer哪些帮助如何将MKLocalSearchCompletion结果提供给UISearchController
但是,他们把他们的结果给一个tableview。我想在与地图相同的视图中呈现结果。我也想知道怎么看它完成用户选择
这里的所有相关的代码,我现在
// Enable Searching
var searchController: UISearchController!
var request: MKLocalSearchRequest!
var search: MKLocalSearch!
var response: MKLocalSearchResponse!
// Autocompletion
var searchCompleter = MKLocalSearchCompleter()
var searchResults = [MKLocalSearchCompletion]()
override func viewDidLoad() {
searchCompleter.delegate = self
searchCompleter.filterType = MKSearchCompletionFilterType.LocationsOnly
super.viewDidLoad()
}
@IBAction func searchAction(sender: UIBarButtonItem) {
searchController = UISearchController(searchResultsController: nil) // nil as I want the autocompletion results to appear in this view
searchController.hidesNavigationBarDuringPresentation = false
self.searchController.searchBar.delegate = self
presentViewController(searchController, animated: true, completion: nil)
}
func completerDidUpdateResults(completer: MKLocalSearchCompleter) {
searchResults = completer.results
print(searchResults) // Shows me that this is working and that it is grabbing locations
// I need to instead give these results to the UISearchController to display
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String){
searchCompleter.queryFragment = searchBar.text!
}
func searchBarSearchButtonClicked(searchBar: UISearchBar){
searchBar.resignFirstResponder()
dismissViewControllerAnimated(true, completion: nil)
//request = MKLocalSearchRequest(completion: /* user's completion selection*/)
//Since I don't know the above, it currently just searches by user text
request = MKLocalSearchRequest()
request.naturalLanguageQuery = searchBar.text
search = MKLocalSearch(request: request)
search.startWithCompletionHandler {
(response, error) -> Void in
if response == nil{
return
}
self.map.centerCoordinate = CLLocationCoordinate2D(latitude: response!.boundingRegion.center.latitude, longitude: response!.boundingRegion.center.longitude)
}
}