UISearchController закрывает VC при нажатии кнопки отмены

Итак, в настоящее время я пытаюсь заменить устаревший searchDisplayController в одном из моих проектов на UISearchController, и я столкнулся с этой проблемой.

Если в поиске нет результатов (UITableView пуст), весь ViewController закрывается. Этого не происходит, когда результаты поиска не пусты. Я не хочу, чтобы было ясно, что я не использую UITableViewController. Вместо этого у меня есть обычный VC с UITableView.

Вот часть моего кода:

var resultSearchController = UISearchController()
override func viewDidLoad() {
    super.viewDidLoad()
    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.delegate = self
        controller.searchBar.delegate = self
        self.studentTable.tableHeaderView = controller.searchBar
        return controller
    })()
    ....
}

Теперь, если я добавлю эту функцию в уравнение, кнопка отмены всегда закрывает VC.

func searchBarCancelButtonClicked(searchBar: UISearchBar) {
    resultSearchController.active = false
}

Так почему же установка searchController.active = false закрывает VC? Это потому, что он использует тот же UITableView, что и VC? Я считаю, что старый searchDisplayController просто отображал бы UITableView поверх используемого. Если это так, есть ли способ переопределить отклонение VC?


person boidkan    schedule 05.05.2015    source источник
comment
Что произойдет, если вы не включите настройку строки с active по false и нажмете кнопку отмены?   -  person shim    schedule 05.05.2015
comment
Когда он не включен, он закрывает VC только при отсутствии результатов поиска, как указано в вопросе. Если он включен, то он всегда делает это при нажатии кнопки отмены.   -  person boidkan    schedule 05.05.2015
comment
Он закрывается, когда нет результатов поиска, или закрывается, когда нет результатов поиска, и вы нажимаете «Отмена»?   -  person shim    schedule 05.05.2015
comment
Нет результатов поиска, и вы нажали «Отмена». Любые идеи?   -  person boidkan    schedule 05.05.2015
comment
Нашел этот очень подробный ресурс. Возможно, строка с definesPresentationContext = true является решающим фактором.   -  person shim    schedule 06.05.2015
comment
Спасибо, пройду!   -  person boidkan    schedule 06.05.2015
comment
Пожалуйста; Дайте мне знать, если добавление этой строки поможет, и я добавлю ее в качестве ответа ниже.   -  person shim    schedule 06.05.2015
comment
@boidkan, я тоже столкнулся с той же проблемой, у тебя есть какое-нибудь решение?   -  person user2526811    schedule 16.12.2016


Ответы (2)


это тоже происходит со мной. Как я решаю это, заменив:

   resultSearchController.active = false

с

    resultSearchController.searchBar.text = ""
    resultSearchController.searchBar.resignFirstResponder()

Я надеюсь, это поможет вам :-)

person Hernan Arber    schedule 09.03.2017
comment
Это решение сохраняет активность searchController, что означает, что если вы прикрепили SearchBar к табличному представлению с включенным раскрывающимся для обновления, индикатор обновления не будет виден; В качестве альтернативного обходного пути удалите существующий searchBar из супервизора и создайте и прикрепите новый к табличному представлению. - person Delorean; 06.06.2017

2018 Просто хочу поделиться результатами моей 1-2-часовой отладки.

У меня было несколько проблем с использованием UISearchController с UITabBarController, а именно:

  1. Этот, этот самый вопрос ОП. Нажатие кнопки отмены закрывает экран, на котором представлен searchController.

  2. Вкладка (или экран) становится черной, Tab Bar и UISearchController дает черный экран

  3. Использование UISearchController внутри заголовка панели навигации UINavigationController в iOS 10, 11 и 12, как и этот вопрос. UISearchBar увеличивает высоту панели навигации в iOS 11

И для решения № 3, поскольку мы уже здесь: https://stackoverflow.com/a/53264329/3231194

Наконец, ЕДИНСТВЕННОЕ решение, которое я видел все это время, это добавление этого кода:

self.definesPresentationContext = true

Проблема в том, что я поместил это в неправильную функцию.

Помните, что это решение решило проблемы №1 и №2, которые у меня были. Ни больше ни меньше.

Куда это добавить? Внутри viewDidAppear. Вот и все!

person Glenn Posadas    schedule 22.11.2018