web-dev-qa-db-fra.com

Obtenir la barre de recherche dans la barre de navigation dans Swift

J'ai donc tout essayé en essayant de placer une barre de recherche dans la barre de navigation de Swift. Mais malheureusement, je ne l'ai pas encore fait fonctionner ... 

Pour ceux d'entre vous qui ne savent pas de quoi je parle, j'essaie de faire quelque chose comme ça

enter image description here

Notez la barre de recherche dans la barre de navigation. Alors voici ce que j'utilise actuellement 

self.searchDisplayController?.displaysSearchBarInNavigationBar = true

Je l'ai fait apparaître dans ma viewDidLoad, et ensuite, lorsque je télécharge l'application qui me est présentée, il suffit d'une barre de navigation vide .... :( Des idées?

45
user302975

Essaye ça

var leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar)
  self.navigationItem.leftBarButtonItem = leftNavBarButton

Mettre à jour

Vous conservez une propriété paresseuse UISearchBar

lazy   var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))

Dans viewDidLoad 

searchBar.placeholder = "Your placeholder"
var leftNavBarButton = UIBarButtonItem(customView:searchBar)
self.navigationItem.leftBarButtonItem = leftNavBarButton

Si vous souhaitez utiliser le storyboard Faites simplement glisser votre barre de recherche en tant que sortie, puis remplacez la propriété lazy

63
Leo
    // create the search bar programatically since you won't be
    // able to drag one onto the navigation bar
    searchBar = UISearchBar()
    searchBar.sizeToFit()

    // the UIViewController comes with a navigationItem property
    // this will automatically be initialized for you if when the
    // view controller is added to a navigation controller's stack
    // you just need to set the titleView to be the search bar
    navigationItem.titleView = searchBar
46
antonio081014

Dans votre contrôleur de vue:

lazy var searchBar = UISearchBar(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.placeholder = "Search"

    navigationItem.titleView = searchBar
}

En procédant de cette manière, en paramétrant navigationItem.titleView, la barre de recherche est automatiquement centrée sur les appareils iPhone et iPad. Remarque: testé uniquement avec les versions v8.4 et v9.0 

pour Swift 3

lazy var searchBar = UISearchBar(frame: CGRect.zero)
14
iAmcR
    let searchBar = UISearchBar()
    searchBar.sizeToFit()
    searchBar.placeholder = ""
    self.navigationController?.navigationBar.topItem?.titleView = searchBar
1
luhuiya
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    searchBar.endEditing(true)
    searchBar.text = nil
    print("## search btn clicked : \(searchBar.text ?? "")")
} 
0
Sami Youssef

Définir SearchBar en tant que titleView, modifie la hauteur de navigationBar en 56. Pour résoudre ce problème, vous pouvez incorporer searchBar dans la vue et le définir en tant que titleView.

    var offset: CGFloat = 20

    // If VC is pushed, back button should be visible
    if navigationController?.navigationBar.backItem != nil {
        offset = 40
    }

    let customFrame = CGRect(x: 0, y: 0, width: view.frame.size.width - offset, height: 44.0)
    let searchBarContainer = UIView(frame: customFrame)
    searchBar = UISearchBar(frame: customFrame)
    searchBarContainer.addSubview(searchBar)
    navigationItem.titleView = searchBarContainer
0
Arijan

Pour Swift 4 et 5.

Incorporer votre contrôleur de vue dans un contrôleur de navigation

let searchBar = UISearchBar()
self.navigationItem.titleView = seachBar
[Here is a screenshot.][1]
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: 
cancelButton.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 

searchBar.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 
self.navigationItem.rightBarButtonItem = cancelButton
0
Manas Sharma

Pour iOS 11 et supérieur

navigationItem.searchController = searchController

enter image description here

Pour iOS 10 et inférieur

navigationItem.titleView = searchController.searchBar;

enter image description here

ou vous pouvez l'affecter à leftBarButtonItem comme décrit dans cette réponse

0
Husam