2016-08-01 7 views
0

Ich bin auf der Suche nach Durchführung der Suche abgeschlossen in einer Map-Seite mit nativen iOS-Funktionen. Ich habe gefunden this answer, die geholfenWie gebe ich die MKLocalSearchCompletion-Ergebnisse an den UISearchController

Allerdings geben sie ihre Ergebnisse zu einem Tableview. Ich möchte die Ergebnisse in derselben Ansicht wie die Karte präsentieren. Ich frage mich auch, wie zu sehen, welche Abschluss der Benutzer

hier alle relevanten Code wählt ich jetzt

// 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) 
    } 
} 

Antwort

0

Ich konnte nicht die Ergebnisse in der aktuellen Ansicht präsentieren, weil die aktuelle Ansicht nicht war Tabellenansicht. Um sie ohne eine Tabellenansicht darzustellen, hätte ich eine benutzerdefinierte Methode zur Anzeige dieser Tabellen erstellen müssen, und mir wurde klar, dass es einfacher ist, eine Tabellenansicht zu verwenden und eine Referenz an die searchResultsController zu übergeben, statt

zu übergeben