2017-01-15 6 views
2

UISearchControllerUINavigationBarの中にあります。ユーザーはUIBarButtonItemをタップしなければなりません。そこで、UIViewControllerを新規にインスタンス化して検索を開始します。検索バーを最初のレスポンダにする

class ViewController: UIViewController { 

    var searchController: UISearchController! 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    setupSearchController() 
    } 

    func setupSearchController() { 
    searchController = UISearchController(searchResultsController: nil) 
    searchController.searchBar.delegate = self 
    searchController.searchResultsUpdater = self 
    searchController.searchBar.showsCancelButton = true 
    searchController.dimsBackgroundDuringPresentation = false 
    searchController.hidesNavigationBarDuringPresentation = false 

    definesPresentationContext = true 
    navigationItem.titleView = searchController.searchBar 
    } 
} 

私は手を前に研究をたくさんやったが、それでも解決策を見つけるために管理することができません...ファーストレスポンダになっ探索制御を行うことで

ヘルプは非常に高く評価されるだろう。

答えて

1

は、あなたが検索バーがfirstResponder searchControllerないようにしたいと、これは動作するはずです、

extension SearchMovieViewController: UISearchControllerDelegate { 

    func didPresentSearchController(_ searchController: UISearchController) { 
    searchController.searchBar.becomeFirstResponder() 
    } 
} 

これを行います。

+0

あなたの提案を試しても、それは機能しません。 :( – damiancesar

6

UISearchBarをメインスレッドの最初の応答者にすることはsolutionでした。

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

    DispatchQueue.main.async { 
    self.searchController.searchBar.becomeFirstResponder() 
    } 
}