2017-08-18 14 views
1

Navigation BarにViewControllerを埋め込むと、navigationItem.titleView.resultSearchController?.searchBarはナビゲーションバーに検索バーを配置します。しかし、私はコードでUISearchControllerとUINavigationBarを作成しました。今回は、navBarが表示されていますが、searchBarは表示されません。UISearchController Searchbarをコード付きのナビゲーションバーに配置するには

resultSearchController = UISearchController(searchResultsController: locationSearchTable) 
resultSearchController?.searchResultsUpdater = locationSearchTable 

let searchBar = resultSearchController!.searchBar 
searchBar.sizeToFit() 
searchBar.delegate = self 

let navBar: UINavigationBar = UINavigationBar(frame: CGRect(x: 0, y:0, width: 375, height: 64)) 
self.view.addSubview(navBar) 
//navBar.topItem = resultSearchController?.searchBar 
self.navigationItem.titleView = resultSearchController?.searchBar 

navBar.topItem = resultSearchController?.searchBartopItemは、文字列の値であり、resultSearchController?.searchBarUIViewタイプであるため、動作しません。どうすれば同じ効果を達成できますか?

答えて

2

UINavigationItemインスタンスを作成し、作成したナビゲーションバーに追加します。 UINavigationItemに検索コントローラの検索バーをtitleViewとして追加します。

class SearchViewController: UIViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate { 

    var searchController: UISearchController! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.addNavigationbar() 
    } 

    func addNavigationbar() { 
     let navBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 60)) 
     self.view.addSubview(navBar) 

     let navigationItem = UINavigationItem(title: "") 
     self.searchController = searchControllerWith(searchResultsController: nil) 
     navigationItem.titleView = self.searchController.searchBar 

     navBar.setItems([navigationItem], animated: false) 
     self.definesPresentationContext = true 
    } 

    func searchControllerWith(searchResultsController: UIViewController?) -> UISearchController { 

     let searchController = UISearchController(searchResultsController: searchResultsController) 
     searchController.delegate = self 
     searchController.searchResultsUpdater = self 
     searchController.searchBar.delegate = self 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.dimsBackgroundDuringPresentation = true 

     return searchController 
    } 
0
class UIViewController: 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) { 

    } 


} 
+0

このコードではナビゲーションバーは作成されません。このコードは、VCをナビゲーションバーに埋め込むと仮定して動作します。私の質問はどのようにsearchBarを私はコードで作成したnavBarのtitleViewにするのですか? – zachenn

関連する問題