2015-05-13 2 views
31

UISearchDisplayController имеет boolean объект недвижимости displaysSearchBarInNavigationBar. Что эквивалентно в iOS 8, чтобы моя панель поиска двигалась там? Любые рекомендации приветствуются.Отображение строки поиска в навигационной панели в iOS 8

Вот мой код, я не совсем уверен, почему это не работает. Когда я нажимаю на панель поиска, она просто исчезает, а не перемещается сама и панель навигации вверх.

import UIKit 

class ViewController: UIViewController, UISearchResultsUpdating, UISearchControllerDelegate, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource { 

let searchController = UISearchController(searchResultsController: nil) 

var tableView = UITableView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 

    self.searchController.searchResultsUpdater = self 
    self.searchController.delegate = self 
    self.searchController.searchBar.delegate = self 

    self.searchController.hidesNavigationBarDuringPresentation = true 
    self.searchController.dimsBackgroundDuringPresentation = true 

    tableView.dataSource = self 
    tableView.delegate = self 


    self.navigationItem.titleView = searchController.searchBar 


    self.definesPresentationContext = true 

    self.setupSearchBar() 




} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

func updateSearchResultsForSearchController(searchController: UISearchController) { 

} 

func setupSearchBar() { 

    // Set search bar position and dimensions 
    var searchBarFrame: CGRect = self.searchController.searchBar.frame 
    var viewFrame = self.view.frame 
    self.searchController.searchBar.frame = CGRectMake(searchBarFrame.origin.x, searchBarFrame.origin.y + 64,viewFrame.size.width, 44) 


    // Add search controller's search bar to our view and bring it to forefront 
    self.view.addSubview(self.searchController.searchBar) 

} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    var cell = UITableViewCell() 

    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 5 
} 
} 

ответ

74

Согласно Apple:

UISearchDisplayController осуждается в прошивке 8. (Обратите внимание, что UISearchDisplayDelegate также не рекомендуется.) Для того, чтобы управлять презентацией полосы поиска и отображения результатов поиска в прошивке 8 и более поздних версии , вместо этого используйте UISearchController.

Класс UISearchController определяет интерфейс, который управляет представлением строки поиска совместно с содержимым контроллера результатов поиска. Контроллер результатов поиска, объект UIViewController, указанный объектом searchResultsController, управляет результатами поиска.

Теперь вы можете использовать UISearchController, чтобы показать панель поиска в панели навигации следующим образом:

class ViewController: UIViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate { 

    var searchController : UISearchController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.searchController = UISearchController(searchResultsController: nil) 

     self.searchController.searchResultsUpdater = self 
     self.searchController.delegate = self 
     self.searchController.searchBar.delegate = self 

     self.searchController.hidesNavigationBarDuringPresentation = false 
     self.searchController.dimsBackgroundDuringPresentation = true 

     self.navigationItem.titleView = searchController.searchBar 

     self.definesPresentationContext = true   
    } 

    func updateSearchResults(for searchController: UISearchController) { 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 
} 

Но вы должны учитывать, что вам нужно установить UINavigationController как в этом раскадровки:

enter image description here

Вы можете сделать это очень легко просто выбрать ViewController и посмотреть следующие шаги:

enter image description here

И тогда вы должны увидеть в вашем устройстве, когда вы делаете щелчок в строке поиска следующую картину:

enter image description here

Я надеюсь, что это поможет вам

+1

Это не действительно сделаю это для меня. Я отправил свой код. Не стесняйтесь смотреть на него и рассказывать мне, почему это не так, как я хочу. – Mihado

+1

@MihadAlzayat Я тестировал его с помощью навигационной панели, и он отлично работает и не исчезает, но что вы действительно хотите? поместите панель поиска под панель навигации (в верхней части таблицы)? –

+0

@MihadAlzayat См. Обновленный ответ, чтобы узнать, как это сделать, используя панель навигации, как вы просили –