2016-08-02 2 views
0

컨텍스트 : UISearchController가 구현 된지도보기가 있습니다. 검색 컨트롤러는 그 결과를 다른 테이블보기 컨트롤러에 표시합니다.UISearchController보기를 닫으려면 어떻게해야합니까?

동일한보기 내에서 검색 컨트롤러를 닫는 방법을 설명하는 this answer이 있습니다. 그러나 내 결과 페이지는 원래 페이지와 다른보기입니다. 내가 가지고있다

let resultsPage = ResultsTableViewController() 
let searchController = UISearchController(searchResultsController: resultsPage) 

이제 검색 컨트롤러가 결과를 얻으면 테이블보기 컨트롤러에 표시합니다. 사용자가 결과 중 하나를 선택하면이보기를 닫고지도보기로 돌아가서 선택 사항을 전달하려고합니다. 나는 이것을 segue로해야 하는가, 아니면 더 나은 프로그램 가능한 접근법이 있는가?

답변

1

내 앱에서 똑같은 작업을 했습니까? 내지도보기 컨트롤러에는 검색 창이 있습니다. 사용자가 검색 문자열을 입력하면 발견 된 주소 목록과 함께 테이블보기 컨트롤러가 표시됩니다. 사용자는 주소를 선택하여 테이블보기 컨트롤러를 닫고 선택한 주소의 핀을지도에 놓을 수 있습니다.

표시되는 테이블 뷰에서 didSelectRowAtIndexPath를 사용하여 테이블 뷰 컨트롤러를 닫고 프로토콜/위임자를 사용하여 선택한 항목을 다시 맵보기 컨트롤러로 전달합니다. 지도보기 컨트롤러가이 프로토콜을 준수하도록하십시오. 나는이 정확한 설정을했고 잘 작동한다.

protocol DropPinOnSelectedLocationDelegate { 
    func dropPinOnLocation(placemark:MKPlacemark) 
} 

class LocationSearchTable: UITableViewController { 
... 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    let cell = tableView.cellForRowAtIndexPath(indexPath) 
    self.mySearchController.searchBar.endEditing(true) 
    if let indexPath = tableView.indexPathForCell(cell!) { 
     selectedItem = matchingItems[indexPath.row].placemark 
    } 
    self.dismissViewControllerAnimated(true, completion: { 
     self.delegate?.dropPinOnLocation(self.selectedItem!) 
    }) 
    } 
} 
+0

나는 궁극적으로이 같은 일을 끝내었다. segue는 깨끗하지 않았으므로 didSelect를 사용하여 맵보기로 값을 다시 전달한 다음 self.dismissViewControllerAnimated라는 이름으로 맵보기의 검색 기능을 완성했습니다. 값을 전달하기 위해 ResultsTableViewController 내부에 MapViewController에 대한 참조가 있습니다. 나는 원래 질문에 나와있는 것처럼 ResultsTableViewController를 만든 다음 resultsPage.mapView = self라고 말합니다. –