How do you dismiss a UISearchController ? (iOS 8 and follow)

Arnaud picture Arnaud · Feb 10, 2015 · Viewed 32.1k times · Source

This must be trivial, but I can't find how you're supposed to dismiss a UISearchController programmatically?

Note that it's the new UISearchController (introduced in 2014 with iOS 8), not the UISearchDisplayController.

So far here's what I've got

// Dismiss the search tableview
searchController.dismissViewControllerAnimated()
// Clear the Search bar text
searchController.active = false

But I still have the cancel button and can't get rid of it.

Answer

Arnaud picture Arnaud · Feb 10, 2015

OK so after more testing, turns out you just have to set:

searchController.active = false
// or swift 4+
searchController.isActive = false

This is the first thing I tried but I called it in one of the UISearchControllerDelegate methods which didn't work (probably should have called it with dispatch_async (halbano's answer seems to confirm that)).

Anyway, since I couldn't find that answer online, I'm answering my own question, I hope that it'll help someone.