iOS Swift 4 - Как вставить UISearchController в NavigationController - PullRequest
0 голосов
/ 31 декабря 2018

Итак, у меня есть следующие настройки.

InitialViewController (VC) -> NavigationController -> ViewController1 (VC1) содержит UISearchController, отображает результаты в новом контроллере ViewController2 (VC2) -> Segue от щелчка ячейкина VC2 -> Запустить ViewController3 (VC3)

Мне нужно закрыть VC3 и вернуться к VC1.Однако ни VC2, ни VC3 не являются частью стека навигационных контроллеров.Я в значительной степени перепробовал все предложенные альтернативы, но безрезультатно.

Как передать контроллер UISearch и результаты в стек навигации?

Я создаю экземпляр моего UISearchController в VC1 следующим образом:

    searchController = UISearchController(searchResultsController: 
    searchResultsController)
    searchController!.searchResultsUpdater = searchResultsController
    searchController?.delegate = self
    searchController!.obscuresBackgroundDuringPresentation = true
    searchController!.searchBar.placeholder = "Search stocks"
    searchController?.hidesNavigationBarDuringPresentation = false
    definesPresentationContext = true
    searchController!.searchBar.delegate = searchResultsController
    //navigationItem.searchController = searchController
    navigationItem.hidesSearchBarWhenScrolling = false
    navigationItem.titleView = searchController?.searchBar
    definesPresentationContext = true

И мой searchResultsController:

extension WatchListTableViewController: UISearchResultsUpdating, UISearchBarDelegate {
    // MARK: - UISearchResultsUpdating Delegate
    func updateSearchResults(for searchController: UISearchController) {
        // TODO
        filterContentForSearchText(searchController.searchBar.text!)
    }
}
class WatchListTableViewController: UITableViewController {
    var stocks =  [String]()
    var filteredStocks = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
        stocks = ["Apple", "Google", "Microsoft", "Tesla"]
        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }

1 Ответ

0 голосов
/ 03 января 2019

Решил это следующим образом:

Убрал Seoryboard Segue из VC2 в VC3.

В VC2 - перенес VC3 в стек навигации с помощью:

self.presentingViewController?.navigationController?.pushViewController(vc, animated:true)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...