上下文:有一个实现了UISearchController的地图视图。搜索控制器在不同的表视图控制器中显示其结果
我发现this answer解释了如何在同一视图中关闭搜索控制器。但是,我的结果页面与其原始页面的视图不同。我有
let resultsPage = ResultsTableViewController()
let searchController = UISearchController(searchResultsController: resultsPage)
现在,当搜索控制器获得结果时,它会在表视图控制器上显示它们。当用户选择其中一个结果时,我想关闭此视图并返回到地图视图,并传递其选择。我应该用segue做这个,还是有更好的可编程方法?
答案 0 :(得分: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!)
})
}
}