iosswiftuisearchbaruisearchbardelegate

UISearchBar ends editing, hides keyboard, but screen is still dimmed


I have a view controller in which I dynamically create a UISearchController and assign it to self.navigationItem.searchController.

class MyViewController: UIViewController, UISearchBarDelegate {
    let searchController = UISearchController(searchResultsController: nil)

override func viewDidLoad() {
        super.viewDidLoad()

        navigationItem.searchController = searchController
        searchController.searchBar.delegate = self

        // launch the app directly into this search text box
        searchController.searchBar.becomeFirstResponder()
    }

    func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
       // I tried this
       searchBar.resignFirstResponder()
       // and this
       searchBar.endEditing(true)
       // and finally this
       return true
   }

}

The keyboard hides away when the user touches anywhere outside the searchbar and the screen goes back to its brightness. That is the expected behavior.

However, when the user taps the [Search] button within the on-screen-keyboard, the keyboard goes away, but the screen is kept dim. None of the sub-views are useable, except if the user taps the search bar again, then the keyboard comes back.

So in short, the only way for the user to continue using the view controller, is not to hit the [search] button, which is counter-intuitive.

am I missing something?


Solution

  • In viewDidLoad(), add the following line:

    searchController.obscuresBackgroundDuringPresentation = false
    

    From the documentation: If you use the same view controller to display the searchable content and search results, it is recommended that you set this property to false. The default value of this property is true.