J'ajoute UISearchBar au-dessus de UINavigationBar et définit UIsearchbar showsCancelButton YES, fonctionne correctement sous iOS6, mais sous iOS7 sans afficher le bouton d'annulation . J'ai utilisé l'extrait de code ci-dessous
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 600, 44)];
searchBar.showsCancelButton = YES;
searchBar.translucent = NO;
[searchBar setTintColor:[UIColor redColor]];
searchBar.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar addSubview:searchBar];
Pour une raison quelconque, iOS7 n'affiche pas le bouton d'annulation lorsqu'il est ajouté à une barre de navigation. Cela se produit également si vous essayez de le définir comme titleView d'un article de navigation.
Vous pouvez contourner ce problème en encapsulant UISearchBar dans un autre UIView en premier. Voici comment je le fais en tant que titleView:
UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *barWrapper = [[UIView alloc]initWithFrame:searchBar.bounds];
[barWrapper addSubview:searchBar];
self.navigationItem.titleView = barWrapper;
J'ai eu le même problème, sur la barre de recherche de l'iPhone avec le bouton d'annulation, mais le bouton d'annulation n'a pas été affiché sur l'iPad. Enveloppant UIsearchBar à UIView comme un problème de style @Rodskjegg. Sur iPad, UIsearchBar le définit comme titleView d'un élément de navigation et ajoute UIBarButtonItem à setRighttBarButtonItem comme étant UIBarButtonSystemItemCancel.
[self.navigationItem setLeftBarButtonItem:Nil animated:YES];
self.navigationItem.titleView = self.searchBar;
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(searchBarCancelButtonClicked:)];
[self.navigationItem setRightBarButtonItem: cancelButton animated:YES];
}
else {
[self.navigationItem setRightBarButtonItem: nil animated:YES];
}
Depuis iOS 7, vous pouvez simplement définir la propriété displaysSearchBarInNavigationBar
sur YES
sur la UISearchDisplayController
pour obtenir automatiquement une UISearchbar
dans la NavigationBar.
OuiDans iOS 7, le bouton est situé sur l'écran, mais son titre peut être invisibleMa solution a été de définir le style de recherche sur "Minimal" et de choisir la couleur de la barre de couleur pour "Annuler" dans IB.
Et le résultat dans un simulateur:
J'ai eu le même problème. Sur l'iPhone, l'annulation de la recherche a bien été affichée, mais pas sur l'iPad.
La solution de contournement consistant à insérer la barre UISearchBar dans une autre UIView ne fonctionnait pas bien pour moi car elle avait une apparence différente et une largeur incorrecte en rotation.
Ma solution est simple: utiliser la recherche SANS annuler et ajouter annuler sous le nom UIBarButtonItem.
Implémentez le délégué de la barre de recherche et utilisez ceci:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
searchBar.showsCancelButton = YES;
}