web-dev-qa-db-fra.com

Le bouton Annuler n'est pas affiché dans UISearchBar

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.

enter image description here

Quelqu'un peut-il m'aider à ce sujet?. Merci d'avance.

15
Sheik_101

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;
18

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.

7
Tal Haham

Essaye ça. Ajouter une coche pour les spectacles annuler bouton. 

enter image description here

2
Kaey

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. 

 enter image description here

1

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: -

  1. 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
    
  2. Glissez et déposez le bouton Bar sur le côté droit du contrôleur de vue et nommez-le comme Annuler.

  3. 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)
    }
    
1
Chathuranga Silva
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)
        }
    }
1
Sagar Daundkar