2016-09-21 1 views
0

Je cherche à chercher une région pour "Épiceries", en utilisant l'emplacement de base et MKLocalSearch.MKLocalRechercher à la table dans Swift

Je pense que j'ai eu la "recherche locale" vers le bas, mais je ne sais pas quoi faire avec les résultats. Je cours xcode8 avec swift3.

Je cherche à remplir ce tableau avec le nom du magasin, l'adresse, et à passer le long des coordonnées GPS un nouveau contrôleur de vue pour un autre processus de "configuration". Je voudrais un lien youtube (ou une instruction) pour configurer correctement la vue de table, puis le code pour remplir les informations de MKLocalSearch.

Merci!

func updateSearchResultsForSearchController(){ 
    let request = MKLocalSearchRequest() 
    let span = MKCoordinateSpan(latitudeDelta: 0.025, longitudeDelta: 0.025) 

    let region = MKCoordinateRegion(center: (locationManager.location?.coordinate)!, span: span) 

    request.naturalLanguageQuery = "Grocery" 

    request.region = region 

    let search = MKLocalSearch(request: request) 

    search.start { (localSearchResponse, error) -> Void in 
     print(localSearchResponse) 
     //Code needed here to fill table view 
    } 
} 

Répondre

0

De la réponse de recherche locale, vous pouvez extraire les données nécessaires dont vous avez besoin comme coordonnées, le titre du magasin, et l'adresse comme suit:

d'abord initialise un tableau vide qui sera utilisé pour remplir votre tableView :

var searchResults: [MKMapItem]() 

suivant à cette liste, avec votre réponse de recherche et mettre à jour le tableView avec les nouvelles données:

search.start { (localSearchResponse, error) -> Void in 
    searchResults = localSearchResponse.mapItems 
    tableView.reloadData() // update the tableView data source 
} 

Ensuite, mettre à jour votre tableView avec mise en forme appropriée des résultats:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> 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 
} 

Enfin, si vous voulez transmettre les données de coordonnées à un autre viewController, vous pouvez le faire en passant tout le tableau ou plus que probable que vous voulez Pour ce faire, sélectionnez la cellule et passez la mapItem associée à la cellule:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    let searchResult = searchResults[indexPath.row] 
    let groceryViewController = // initialise the new viewController 
    groceryViewController.coordinate = searchResult.placemark.coordinate 

    // push the new viewController 
    self.navigationController?.pushViewController(groceryViewController, animated: true) 
}