2016-08-02 1 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

Я в конечном итоге закончил делать то же самое. Сег не был таким чистым, поэтому я использовал didSelect, чтобы передать значение обратно в представление карты, а затем self.dismissViewControllerAnimated с завершением, являющимся функцией поиска вида карты. Чтобы передать значение, у меня есть ссылка на MapViewController внутри объекта ResultsTableViewController. Я создаю ResultsTableViewController, как показано в исходном вопросе, тогда я говорю resultsPage.mapView = self –