如何关闭 UISearchController 视图?
How do I dismiss a UISearchController view?
上下文:有一个实现了 UISearchController 的地图视图。搜索控制器在不同的 table 视图控制器
中显示其结果
我发现 解释了如何在同一视图中关闭搜索控制器。但是,我的结果页面与其原始页面的视图不同。我有
let resultsPage = ResultsTableViewController()
let searchController = UISearchController(searchResultsController: resultsPage)
所以现在当搜索控制器获得结果时,它会将它们显示在 table 视图控制器上。当用户选择其中一个结果时,我想关闭此视图并返回到地图视图,同时传递他们的选择。我应该使用 segue 来执行此操作,还是有更好的可编程方法?
在我的应用程序中做了同样的事情。我的地图视图控制器有一个搜索栏。当用户输入搜索字符串时,它会显示一个 table 视图控制器,其中包含找到的地址列表。用户可以 select 一个地址,然后关闭 table 视图控制器并在地图上为 selected 地址放置一个图钉。
在显示的 table 视图中,使用 didSelectRowAtIndexPath 关闭 table 视图控制器并使用 protocol/delegate 将 selected 项目传回地图视图控制器。让您的地图视图控制器符合此协议。我做了这个精确的设置并且效果很好。
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!)
})
}
}
上下文:有一个实现了 UISearchController 的地图视图。搜索控制器在不同的 table 视图控制器
中显示其结果我发现
let resultsPage = ResultsTableViewController()
let searchController = UISearchController(searchResultsController: resultsPage)
所以现在当搜索控制器获得结果时,它会将它们显示在 table 视图控制器上。当用户选择其中一个结果时,我想关闭此视图并返回到地图视图,同时传递他们的选择。我应该使用 segue 来执行此操作,还是有更好的可编程方法?
在我的应用程序中做了同样的事情。我的地图视图控制器有一个搜索栏。当用户输入搜索字符串时,它会显示一个 table 视图控制器,其中包含找到的地址列表。用户可以 select 一个地址,然后关闭 table 视图控制器并在地图上为 selected 地址放置一个图钉。
在显示的 table 视图中,使用 didSelectRowAtIndexPath 关闭 table 视图控制器并使用 protocol/delegate 将 selected 项目传回地图视图控制器。让您的地图视图控制器符合此协议。我做了这个精确的设置并且效果很好。
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!)
})
}
}