2016-08-01 40 views
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) 
    } 
} 

回答

0

我不能将结果呈现在当前视图,因为目前的观点是不是表视图。为了在没有表格视图的情况下呈现它们,我不得不制作一种自定义的方式来显示它们,并且我意识到使用表格视图并将其引用传递给searchResultsController而不是传递零将会更简单,而不是传递零表达式

相关问题