2016-09-21 4 views
0

코어 위치와 MKLocalSearch를 사용하여 "식료품 점"을 검색하고 있습니다.Swift의 테이블 뷰에서 MKLocalSearch

"로컬 검색"이 다운 된 것 같지만 결과를 어떻게 처리해야할지 모르겠다. swift3으로 xcode8을 실행하고 있습니다.

이 테이블을 상점 이름, 주소로 채우고 GPS를 전달하려면 다른 "설정"프로세스를 위해 새로운보기 컨트롤러를 조정해야합니다.

제대로 테이블 뷰를 설정 한 다음 MKLocalSearch에서 정보를 채우는 코드가있는 youtube 링크 (또는 명령어)를 좋아합니다.

감사합니다.

먼저 당신의있는 tableView 채우는 데 사용됩니다 하늘의 배열을 초기화 다음과 같이 당신이 필요한 당신이 좌표처럼 필요 데이터, 가게의 제목과 주소를 추출 할 수있는 로컬 검색 응답에서

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

:

var searchResults: [MKMapItem]() 

다음은 새로운 데이터로있는 tableView를 검색 응답이 목록을 채우고 업데이트 :

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

그런 다음 결과를 적절한 형식으로있는 tableView를 업데이트 : 마지막으로 당신은 다른의 ViewController에 좌표 데이터를 전달하려면

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 
} 

, 당신은 당신이 원하는 것입니다 것보다 전체 배열 이상을 전달하여이 작업을 수행 할 수 셀을 선택하고 셀과 연관된 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) 
}