J'ai UICollectionView
. En cliquant sur le bouton de recherche dans UINavigationBar
, j'ajoute la UISearchController
's searchbar
en tant que titleview pour UINavigationItem
. Pour l'iPhone, cela fonctionne correctement. Pour iPad, le bouton cancel
n'est pas affiché. La barre de recherche seule prend toute la largeur.
Quelqu'un peut-il m'aider à ce sujet?. Merci d'avance.
iOS7 n'affiche pas le bouton d'annulation lorsqu'il est ajouté à une barre de navigation. Vous pouvez mettre la barre de recherche dans une autre vue comme celle-ci.
UISearchBar *searchBar = [UISearchBar new];
searchBar.showsCancelButton = YES;
[searchBar sizeToFit];
UIView *viewForSearchBar = [[UIView alloc]initWithFrame:searchBar.bounds];
[viewForSearchBar addSubview:searchBar];
self.navigationItem.titleView = viewForSearchBar;
J'ai eu le même problème. Sur l'iPhone, l'annulation de la recherche était bien affichée, mais pas sur l'iPad.
La solution de contournement consistant à insérer la UISearchBar
dans une autre UIView
ne fonctionnait pas bien pour moi car elle avait une apparence différente et une largeur incorrecte lors de la rotation.
Ma solution est simple: utiliser la recherche SANS annuler et ajouter annuler en tant que UIBarButtonItem
.
Essaye ça. Ajouter une coche pour les spectacles annuler bouton.
Selon la documentation Apple setShowsCancelButton
Les boutons Annuler ne sont pas affichés pour les applications exécutées sur iPad, même lorsque Vous spécifiez YES pour le paramètre showsCancelButton.
Je ne suis pas sûr de l’alternative, mais c’est ce que Apple nous fournit.
Version rapide: -
J'ai essayé la méthode @Nikita Khandelwal, mais ça ne convient pas pour la vue ipad. Voici le code Swift, qui a été donné comme réponse corrigée: -
let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.fitToSize()
searchBar.delegate = self //do not need if you delegate searchBar
let viewForSearchBar: UIView = UIView(frame: searchBar.bounds)
viewForSearchBar.addSubview(searchBar)
self.navigationItem.titleView = viewForSearchBar
********* Mais il existe un autre moyen de définir le bouton d'annulation correctement et de l'afficher: -
Définissez la barre de recherche comme vue du titre de la barre de navigation: -
let searchBar: UISearchBar = UISearchBar()
searchBar.showCancelButton = true
searchBar.placeholder = "Search Your Job Title"
searchBar.delegate = self //do not need if you delegate searchBar
self.navigationItem.titleView = searchBar
Glissez et déposez le bouton Bar sur le côté droit du contrôleur de vue et nommez-le comme Annuler.
Puis connectez ce bouton à cette fonction: -
@IBAction func iPadCancelButton(sender: AnyObject) {
UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
self.dismissViewControllerAnimated(true, completion: nil)
}
Added rightBarButtonItem with selector will work fine for me. And adding searchBar inside view before setting to navigation title view was not showing properly.
Code:-
self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(self.dismissView))
func dismissView() {
if self.controller?.navigationController?.popViewController(animated: true) == nil {
self.controller?.dismiss(animated: true, completion: nil)
}
}