Сделать панель поиска в панель навигации в Swift

поэтому я пробовал все, пытаясь получить панель поиска в навигационную панель в Swift. Но, к сожалению, у меня пока не получается...

для тех из вас, кто не знает о чем я говорю, я пытаюсь сделать что-то подобное

enter image description here

обратите внимание на строку поиска в панели навигации. Итак, вот что я сейчас использую

self.searchDisplayController?.displaysSearchBarInNavigationBar = true

Я выскочил, что в моем viewDidLoad, а затем, когда я загружаю приложение, которое мне представлено, просто пустая панель навигации.... : (Есть идеи?

5 ответов


попробуй такое

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

обновление

вы держите ленивый UISearchBar собственность

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

в viewDidLoad

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

Если вы хотите использовать раскадровку просто перетащите панель поиска в качестве выхода,а затем замените свойство lazy на панель поиска выхода


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

в вашем контроллере вида:

lazy var searchBar = UISearchBar(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.placeholder = "Search"

    navigationItem.titleView = searchBar
}

сделать это таким образом, установив navigationItem.titleView, панель поиска автоматически центрируется на устройствах iPhone и iPad. Примечание: только протестировано с v8.4 и v9.0

для SWIFT 3

lazy var searchBar = UISearchBar(frame: CGRect.zero)

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

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

    let searchBar = UISearchBar()
    searchBar.sizeToFit()
    searchBar.placeholder = ""
    self.navigationController?.navigationBar.topItem?.titleView = searchBar