Добавить searchBar в навигационную панель после viewDidLoad?

В моем приложении я хочу иметь кнопку поиска на панели навигации, и при нажатии кнопки панель поиска должна появиться на панели навигации. Я видел много постов на эту тему, но почему-то это не работает для меня. Итак, я разместил SearchDisplayController прямо под навигационной панелью. затем в viewDidLoad Я назначаю действие кнопке поиска и удаляю панель поиска из суперпредставления. Как только кнопка нажата, я звоню mapSearchDisplayController.displaysSearchBarInNavigationBar = true, но ничего не происходит. Выдержки из кода ниже:

    override func viewDidLoad() {
            super.viewDidLoad()

            banner.delegate = self

            // Add button to navbar
            var filterButton : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Organize, target: self, action: nil)
            self.navigationItem.leftBarButtonItem = filterButton

            var aboutButton : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "aboutAction")
            var searchButton : UIBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Search, target: self, action: "searchAction")
            var rButtons : [UIBarButtonItem] = [aboutButton, searchButton]
            self.navigationItem.rightBarButtonItems = rButtons


            // Deal with Search Display Controller
            self.mapSearchDisplayController.delegate = self.mapSearchDisplayController;
            self.mapSearchDisplayController.searchResultsDataSource = self.mapSearchDisplayController;
            self.mapSearchDisplayController.searchResultsDelegate = self.mapSearchDisplayController;
            self.mapSearchDisplayController.searchBar.removeFromSuperview();
}
    func searchAction(){
            println("Search action")
            mapSearchDisplayController.displaysSearchBarInNavigationBar = true
        }

Если я позвоню displaysSearchBarInNavigationBar = true в viewDidLoad затем searchBar правильно отображается в панели навигации. Как сделать так, чтобы в панели навигации отображалось нажатие кнопки? Любая помощь оценивается.

1 ответ

Я создал панель поиска, используя

let searchBar = UISearchBar(frame : CGRect(0, 0, self.navigationController?.navigationBar.frame.size.width)! * 0.9, 0)

self.searchBar.placeholder = "Search"
self.searchBar.delegate = self

А затем добавил его в панель навигации следующим образом:

self.navigationItem.titleView = self.searchBar

Дальнейшее оформление и т. Д. Также может быть выполнено, но я просто создал и добавил его в панель навигации при нажатой кнопке и удалил из суперпредставления, когда его нужно было скрыть.

Другие вопросы по тегам