如何解除UISearchController视图?

时间:2016-08-02 16:45:41

标签: ios swift uisearchcontroller

上下文:有一个实现了UISearchController的地图视图。搜索控制器在不同的表视图控制器中显示其结果

我发现this answer解释了如何在同一视图中关闭搜索控制器。但是,我的结果页面与其原始页面的视图不同。我有

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

现在,当搜索控制器获得结果时,它会在表视图控制器上显示它们。当用户选择其中一个结果时,我想关闭此视图并返回到地图视图,并传递其选择。我应该用segue做这个,还是有更好的可编程方法?

1 个答案:

答案 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!)
    })
  }
}