Программно показать UISearchController панели навигации - PullRequest
0 голосов
/ 12 января 2019

Я настроил UISearchController следующим образом в viewDidLoad():

let searchController = UISearchController(searchResultsController: nil);
searchController.delegate = self;
searchController.searchResultsUpdater = self;
searchController.searchBar.delegate = self;

self.searchController.isActive = true;
self.searchController.searchBar.becomeFirstResponder();

self.navigationItem.searchController = searchController;

Хотя я установил isActive и установил searchBar как firstResponder, UISearchController не активен, когда на экране появляется вид. Нажатие на поле открывает его правильно.

Есть ли в iOS 12 причина, по которой свойства isActive и becomeFirstResponder не соблюдаются в viewDidLoad?

Ответы [ 2 ]

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

В моем случае, в iOS 12.x, я просто поместил becomeFirstResponder() в viewDidAppear, с небольшой задержкой, 0,1 секунды . Добавление такой задержки гарантирует представление клавиатуры.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.definesPresentationContext = true

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
        self.searchController.searchBar.becomeFirstResponder()
    }
}

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: Если вы поддерживаете iOS 10 и 11, этот мой ответ из прошлого может помочь вам. https://stackoverflow.com/a/53264329/3231194

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

Не уверен, что там происходит, но он уникален тем, что находится на панели навигации.

Это, кажется, делает трюк, хотя.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    DispatchQueue.main.async(searchController.searchBar.becomeFirstResponder)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...