web-dev-qa-db-fra.com

Comment congédier un UISearchController? (iOS 8 et suivre)

Cela doit être trivial, mais je ne vois pas comment vous êtes censé congédier un UISearchController par programme?

Notez que c'est le nouveau UISearchController (introduit en 2014 avec iOS 8), et non le UISearchDisplayController.

Jusqu'ici voici ce que j'ai

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

Mais j'ai toujours le bouton d'annulation et je ne peux pas m'en débarrasser.

62
Nycen

OK, après plusieurs tests, il vous suffit de définir:

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

C'est la première chose que j'ai essayée, mais je l'ai appelée dans l'une des méthodes UISearchControllerDelegate qui ne fonctionnait pas (j'aurais probablement dû l'appeler avec dispatch_async (la réponse de halbano semble le confirmer)).

Quoi qu'il en soit, comme je ne trouvais pas cette réponse en ligne, je répondais à ma propre question et j'espère que cela aidera quelqu'un.

155
Nycen

Avez-vous eu ce problème lorsque vous essayez de renvoyer le contrôleur de recherche après être passé à une autre vue? J'ai rencontré ce problème aussi. Je pense que vous voudrez peut-être utiliser

self.definesPresentationContext = true 

dans le contrôleur de vue qui présente UISearchController conformément à cet article ISearchController n'est pas rejeté lorsque View est activé . Ça marche pour moi.

20
Yaoyu Yang

Je présentais la mine intégrée dans une barre de navigation. Le code qui fonctionne pour moi était:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.searchController setActive:NO];
        self.navigationController.navigationBar.topItem.title = @"MYTITLE".uppercaseString;
        self.navigationItem.titleView = nil;
    });
}

J'espère que ça aide quelqu'un.

9
halbano

Swift 4+

searchController.isActive = false
5
Boris Nikolic

J'ai eu ce problème en utilisant la recherche et interactionController, résolu après simplement inclure la ligne: self.dismissViewControllerAnimated (false, complétion: nil)

Ouvrez l'interaction et effacez la recherche sans modifier le délégué.

1
MSamsoniuk