2016-06-04 2 views
3

Я пытаюсь добавить SearchController.searchBar под панель навигации.Как добавить SearchController.searchBar под navigationBar (UITableView) swift

override func viewDidLoad() { 
     super.viewDidLoad() 
     searchController = UISearchController(searchResultsController: nil) 
     searchController.searchResultsUpdater = self 
     searchController.searchBar.sizeToFit() 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.delegate = self 
     searchController.dimsBackgroundDuringPresentation = false // 
     searchController.searchBar.delegate = self 
     let SearchFrame = CGRectMake(0,(self.navigationController?.navigationBar.frame.height)!, (self.navigationController?.navigationBar.frame.width)!,searchController.searchBar.frame.height) 
     searchController.searchBar.frame = SearchFrame 
     self.navigationController?.navigationBar.addSubview(searchController.searchBar) 
} 

Этот код добавить поискБар под навигациюБар, но searchBar не может обнаружить взаимодействие с пользователем! Я не могу нажать на поле ввода текста поиска !! Что я сделал не так?

+0

Давайте попробуем отладку. 'self.navigationController? .navigationBar.clipsToBounds = true' -> если ваш' UISearchBar' исчезает, это означает, что вы не изменили высоту своей навигационной панели. –

+0

@ noir_eagle, Да, мой UISearchBar исчезает в этом случае! что я должен делать? – Dmitry

ответ

0

Моя проблема решена!

Сначала нам нужно создать файл XIB с классом и добавить к нему два навигационных блока! Затем нужно добавить IBOutlets! Two navigation bar in xib!

Затем написать код:

var TitleNavigationBar = UINavigationBar() //This need to add Title and Subtitle to NavigationBarTitleView 

override func viewDidLoad() { 
     super.viewDidLoad() 
     let NavBarWithSearch = NSBundle.mainBundle().loadNibNamed("NavBarWithSearchBar", owner: self, options: nil)[0] as! NavBarWithSearchBar 
     self.navigationController?.navigationBar.frame = CGRectMake((self.navigationController?.navigationBar.frame.origin.x)!, 0.0, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)! +   self.searchController.searchBar.frame.height) 
     NavBarWithSearch.frame = CGRectMake(0.0,0.0, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)!) 
     NavBarWithSearch.NavigationBarForSearchBar.topItem?.titleView = searchController.searchBar 
     TitleNavigationBar = NavBarWithSearch.CustomNavigationBar //=======This need to add Title and Subtitle to NavigationBarTitleView` 
     self.navigationController?.navigationBar.addSubview(NavBarWithSearch) 
     self.automaticallyAdjustsScrollViewInsets = false 
     tableView.contentInset = UIEdgeInsetsMake((self.navigationController?.navigationBar.frame.height)! + UIApplication.sharedApplication().statusBarFrame.height, 0, (self.tabBarController?.tabBar.frame.height)!, 0) 
     searchController.hidesNavigationBarDuringPresentation = false 
} 
override func viewWillAppear(animated: Bool) { 

     //This need to add Title and Subtitle to NavigationBarTitleView 
     let titleView = NSBundle.mainBundle().loadNibNamed("NavTitleView", owner: self, options: nil)[0] as! NavTitleView 
     titleView.TitleLabel.text = "Title" 
     titleView.contentMode = UIViewContentMode.ScaleAspectFit 
     titleView.SubtitleLabel.text = "SubTitle" 
     let TitleViewFrame = CGRectMake((UIScreen.mainScreen().bounds.width/2) - 80, 0, 160, 44) 
     titleView.frame = TitleViewFrame 
     TitleNavigationBar.topItem?.titleView = titleView 
     //========This need to add Title and Subtitle to NavigationBarTitleView 
     self.navigationController?.navigationBar.frame = CGRectMake((self.navigationController?.navigationBar.frame.origin.x)!, 20, (self.navigationController?.navigationBar.frame.width)!, (self.navigationController?.navigationBar.frame.height)! + self.searchController.searchBar.frame.height) 

} 

XIB файл с классом для NavBarTitleView с подзаголовком должен выглядеть , как это: Title and SubTitle

Наконец я получить красивую панель навигации с панелью поиска!

Navbar with search bar text input

P.S. searchController.hidesNavigationBarDuringPresentation = true // Это не работает, потому что пользовательская панель навигации добавлена ​​в основную панель навигации в качестве подсмотра!

+0

Игнорируя условные обозначения не верблюдов, я не могу выразить, как это плохо. – TheCodingArt

+0

@ TheCodingArt, я понимаю ... но я не могу найти другого решения! – Dmitry

+0

Я только что сделал это сегодня .... добавил вид под navbar, смешал 2 вместе и имел ребенка VC с таблицей VC в нем под ... снова как примечание к вышесказанному, вы никогда не должны иметь имя переменной и/или имя метода/функции начинаются с шапок ... когда-либо. – TheCodingArt

0

Попробуйте это. Он работает для меня

var SearchFrame : CGRect? 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     let searchController = UISearchController(searchResultsController: nil) 
     searchController.searchResultsUpdater = self 
     searchController.searchBar.sizeToFit() 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.delegate = self 
     searchController.dimsBackgroundDuringPresentation = false // 
     searchController.searchBar.delegate = self 
     SearchFrame = CGRectMake(0,(self.navigationController?.navigationBar.frame.height)!, (self.navigationController?.navigationBar.frame.width)!,searchController.searchBar.frame.height) 
     searchController.searchBar.frame = SearchFrame! 
     self.navigationController?.navigationBar.addSubview(searchController.searchBar) 


    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 

     var navbarFrame = self.navigationController!.navigationBar.frame 
     navbarFrame.size = CGSize(width: navbarFrame.width, height: navbarFrame.height + SearchFrame!.height) 
     self.navigationController?.navigationBar.frame = navbarFrame 
    } 
+0

В этом случае кнопка LeftBarButton TitleView и rightBar находится в строке поиска! Как это исправить? – Dmitry

+0

Ну, вам нужно будет добавить их в виде подпунктов с фиксированными кадрами, вместо того, чтобы устанавливать свойства для navigationItem. –

+0

Благодарим вас за помощь! – Dmitry

Смежные вопросы