2016-09-21 3 views
0

Я ищу поиск в локальной области для «Продуктовых магазинов» с использованием основного местоположения и MKLocalSearch.MKLocalSearch для просмотра таблиц в Swift

Я думаю, что получил «местный поиск», но я не уверен, что делать с результатами. Я запускаю xcode8 с swift3.

Я ищу, чтобы заполнить эту таблицу именем магазина, адресом и передать по координатам GPS новый контроллер просмотра для другого процесса настройки.

Мне понравилось бы ссылку (или инструкцию) для правильной настройки таблицы, а затем код для заполнения информации из MKLocalSearch.

Спасибо!

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

ответ

0

С локального ответа поиска вы можете извлечь необходимые данные, вам требуется как координаты, название магазина и адрес следующим образом:

Сначала инициализируется пустой массив, который будет использоваться для заполнения Вашего Tableview :

var searchResults: [MKMapItem]() 

Следующих заполнить этот список с поиском ответа и обновления Tableview с новыми данными:

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

Затем обновите Tableview с соответствующим форматированием результатов:

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 
} 

Наконец, если вы хотите, чтобы передать данные координат в другую ViewController, вы могли бы сделать это, передав весь массив или больше, чем вероятно, что вы хотите сделайте это при выборе ячейки и прохождении объекта mapItem, связанного с ячейкой:

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