Где я должен поместить код для настройки кнопки «Отмена» в UISearchBar?

Я пытаюсь изменить цвет кнопки «Отмена» в UISearchBar, реализованном с помощью UISearchController (iOS 8 и выше). Это код, который я использую:

if self.resultSearchController.active {
        for subView in self.resultSearchController.searchBar.subviews  {
            for subsubView in subView.subviews  {
                if subsubView.isKindOfClass(UIButton) {
                    subsubView.tintColor =  UIColor.whiteColor()
                }
            }
        }
    }

Если я вставлю его в viewDidLoad, это не сработает, потому что я думаю, что кнопка «Отмена» инициализируется только тогда, когда SearchController становится активным.

Если я вставляю код в viewDidLayoutSubviews, все работает отлично, но я не уверен, что это правильно.

Итак, куда я должен поместить этот код в TableViewController?

Кроме того, я не понимаю, как я могу получить уведомление в своем TableViewController о том, что SearchController становится неактивным. Другими словами, где я должен разместить такой код:

if self.resultSearchController.active == false {
   //Do something 
}

person Oleg Bizin    schedule 22.10.2015    source источник


Ответы (3)


Сначала вы должны вставить методы делегата: -

 class HomeViewController: UIViewController,UISearchResultsUpdating, UISearchBarDelegate {

  var searchController: UISearchController!

  override func viewDidLoad() {
    super.viewDidLoad()
    searchController = UISearchController(searchResultsController: nil)
    searchController.searchResultsUpdater = self
    searchController.dimsBackgroundDuringPresentation = false
    searchController.searchBar.placeholder = "Search here..."
    searchController.searchBar.delegate = self
    searchController.searchBar.sizeToFit()
    searchController.hidesNavigationBarDuringPresentation = true
    tableView.tableHeaderView = searchController.searchBar
    searchController.searchBar.tintColor =  UIColor.whiteColor()

}

 func searchBarTextDidBeginEditing(searchBar: UISearchBar) {

}

func searchBarCancelButtonClicked(searchBar: UISearchBar) {

}

func searchBarSearchButtonClicked(searchBar: UISearchBar) {

}

func updateSearchResultsForSearchController(searchController: UISearchController) {

}


}

затем использовали методы делегирования и меняли цвета кнопки отмены и то, что вы хотите

person Chathuranga Silva    schedule 22.10.2015
comment
Спасибо! Это помогает. Моя проблема заключалась в том, что я забыл назначить себя .searchBar.delegate - person Oleg Bizin; 22.10.2015

Вы можете попробовать это в AppDelegate didFinishLaunchWithOptions:.

UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UISearchBar.self]).tintColor = UIColor.whiteColor()

PS: это общий метод, который повлияет на UIBarButtonItem в UISearchBar во всем приложении.

person Abhinav    schedule 22.10.2015

Swift 4.2, 4.0+ здесь добавлен ответ для пользовательской панели поиска, которую можно настроить как показано ниже,

введите здесь описание изображения

Вы можете проверить использование класса SearchBar.

person Kamran    schedule 16.07.2018