2017-01-31 27 views
4

私のアプリを1つの画面に切り替えました。UISearchBarからUISearchControllerに切り替わりました。これは、テーブルビューコントローラです。デザインごとに、私は最初にUIがアクティブにならない限り、検索バーを保持してはいけません(通常、検索バーを 'tableHeaderView'として保持するのが一般的です)。問題は、「検索バー」をタップしてアクティブにして最初のレスポンダにする必要があるときに、検索ボタンがあることでした。UISearchController最初のレスポンダになるために特別なタップが必要

キャンセルボタンをタップすると、UIから削除する必要があります。しかし、ナビゲーションバーの「検索バーボタン」をタップすると、UISearchControllerがアクティブになり、背景が暗くなりますがキーボードは表示されません。検索バーでもう一度タップしてキーボードをUIに移動する必要があります。

@IBAction func onTapSearch(_ sender: AnyObject) { 
    self.view.addSubview(searchController.searchBar) 
    searchController.isActive = true 
    searchController.becomeFirstResponder() 
    isSearchActive = true 
    self.navigationController?.setToolbarHidden(true, animated: false) 
} 

私は私のviewDidLoad方法でUISearchControllerを設定しています:

は、ここに私の検索バーボタンアクションです。そのパートコードが見たいものであれば教えてください。ただし、通常のコードです。そして私はどこでもresignFirstResponder()メソッドをどこでも呼んでいないことを確認しました。

答えて

5

ちょうど、以下の本、

searchController.searchBar.becomeFirstResponder() 

編集、

searchController.becomeFirstResponder() 

をこの行を置き換え、これを試してみてください

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

このデリゲートメソッドを実装して試してください。

+0

私はそのコードを最初に持っていました。うまくいきませんでした。 –

+0

私の編集した答えを確認してください – KAR

+0

うんうん。ありがとう。 :) –

関連する問題