Подтвердить что ты не робот

Отображение строки поиска в навигационной панели в iOS 8

UISearchDisplayController имел свойство boolean, называемое displaysSearchBarInNavigationBar. Что эквивалентно в 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 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
}
}
4b9b3361

Ответ 1

Согласно Apple:

UISearchDisplayController устарел в iOS 8. (Обратите внимание, что UISearchDisplayDelegate также устарел.) Чтобы управлять представлением строки поиска и отображать результаты поиска в iOS 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

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