web-dev-qa-db-ja.com

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'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
}
}
34
Mihado

Apple:

UISearchDisplayControllerはiOS 8では非推奨です( UISearchDisplayDelegate も非推奨です。)iOS 8以降で検索バーの表示を管理し、検索結果を表示するには、代わりに UISearchController を使用します。

UISearchControllerクラスは、検索結果コントローラーのコンテンツと連携して検索バーの表示を管理するインターフェースを定義します。 searchResultsController プロパティで指定されたUIViewControllerオブジェクトである検索結果コントローラーは、検索結果を管理します。

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

これがお役に立てば幸いです

87
Victor Sigler