In viewDidLoad()
:
searchController = UISearchController(searchResultsController: nil)
let cancelButtonAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(cancelButtonAttributes, for: .normal)
searchController?.dimsBackgroundDuringPresentation = false
searchController?.searchResultsUpdater = self
searchController?.delegate = self
searchController?.searchBar.tintColor = UIColor.black
searchController?.searchBar.barTintColor = UIColor(white: 0.9, alpha: 0.9)
searchController?.searchBar.placeholder = NSLocalizedString("Search", comment: "")
searchController?.hidesNavigationBarDuringPresentation = false
self.navigationItem.titleView = self.searchController?.searchBar
searchController?.isActive = true
self.searchController?.becomeFirstResponder()
self.searchController?.searchBar.becomeFirstResponder()
Here is the delegate method:
extension SearchMembers : UISearchControllerDelegate {
func didPresentSearchController(searchController: UISearchController){
self.searchController?.searchBar.becomeFirstResponder()
}
}
In my test didPresentSearchController(searchController:)
is never called.
I don't know why but whatever I do just doesn't work.
Any idea?
EDIT The only solution that works
delay(0.6) {
self.searchController?.searchBar.becomeFirstResponder()
}
Which creates an unwanted lag