2016-08-02 5 views
0

コンテキスト:UISearchControllerが実装されたマップビューがあります。検索コントローラはその結果を別のテーブルビューコントローラに表示しますUISearchControllerビューを閉じるにはどうしたらいいですか?

私はthis answerと同じビュー内で検索コントローラを却下する方法を説明しています。ただし、結果ページは元のページとは異なるビューです。私は、検索コントローラは、結果を取得するとき

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

はだから今、それはテーブルビューコントローラ上に表示しています。ユーザーが結果の1つを選択すると、このビューを閉じてマップビューに戻り、その選択を渡します。私はセグーでこれを行うべきですか、より良いプログラマブルなアプローチがありますか?

答えて

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と言う –

関連する問題