webentwicklung-frage-antwort-db.com.de

Suchleiste in der Navigationsleiste von Swift abrufen

Also habe ich alles versucht, um eine Suchleiste in die Navigationsleiste von Swift zu bekommen. Aber leider habe ich es noch nicht zum Laufen gebracht ... 

Für diejenigen von Ihnen, die nicht wissen, wovon ich rede, versuche ich so etwas zu tun

enter image description here

Beachten Sie die Suchleiste in der Navigationsleiste. Also hier ist was ich gerade benutze 

self.searchDisplayController?.displaysSearchBarInNavigationBar = true

Ich habe das in meine viewDidLoad gestellt, und wenn ich dann die App lade, wird mir nur eine leere Navigationsleiste angezeigt .... :( Irgendwelche Ideen?

45
user302975

Versuche dies

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

Update

Sie behalten eine faule UISearchBar-Eigenschaft

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

In viewDidLoad 

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

Wenn Sie das Storyboard Verwenden möchten, ziehen Sie Ihre Suchleiste einfach als Outlet und ersetzen Sie dann die Lazy-Eigenschaft durch Ihre Outlet-Suchleiste

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

In Ihrem View Controller:

lazy var searchBar = UISearchBar(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.placeholder = "Search"

    navigationItem.titleView = searchBar
}

Auf diese Weise wird die Suchleiste durch Festlegen von navigationItem.titleView automatisch auf den iPhone- und iPad-Geräten zentriert. Hinweis: Nur mit v8.4 und v9.0 getestet 

für 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

Durch Festlegen von SearchBar als titleView wird die Höhe der Navigationsleiste auf 56 geändert. Um dies zu beheben, können Sie searchBar in die Ansicht einbetten und als titleView festlegen.

    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

Für Swift 4 und 5.

Betten Sie Ihren View Controller in einen Navigationscontroller ein

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

Für iOS 11 und höher

navigationItem.searchController = searchController

enter image description here

Für iOS 10 und niedriger

navigationItem.titleView = searchController.searchBar;

enter image description here

oder Sie können es als leftBarButtonItem zuweisen, wie in diese Antwort beschrieben

0
Husam