2017-05-18 6 views
0

で検索しない:私は内部searchBarButtonClicked機能で且つプリント(searchUrl)にブレークポイントをADDEUISearchController私は、次のコードと私のテーブルビューのヘッダーとしてUISearchControllerを設定しているのUITableViewController

let mySearchController = UISearchController(searchResultsController: nil) 

func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 

    let keywords = searchBar.text 
    let finalKeywords = keywords?.replacingOccurrences(of: " ", with: "+") 

    searchUrl = "https://api.spotify.com/v1/search?q=\(finalKeywords!)&type=track&limit=20" 
    print(searchUrl) 

    callAlamo(url: searchUrl) 

} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.register(postCell.self, forCellReuseIdentifier: cellId) 
    tableView.separatorColor = .red 

    mySearchController.dimsBackgroundDuringPresentation = false 
    definesPresentationContext = true 
    mySearchController.delegate = self as? UISearchControllerDelegate 
    tableView.tableHeaderView = mySearchController.searchBar 

} 

しかし、ブレークポイントには決して行きませんでした。検索バーをクリックしたときにsearchBarSearchButtonClicked関数が実行されないのはなぜですか?

+0

'UISearchControllerDelegateとして?このダウンキャストは恐らく 'nil'を返すでしょう。クラスに実装された 'UISearchControllerDelegate'を追加した場合、ダウンキャストは必要ありません。 – Paulw11

+0

'mySearchController.delegate = self asを削除しましたか? UISearchControllerDelegate'でもまだ動作しません –

+0

デリゲートが必要です。デリゲートとしてクラスを設定する必要がありますが、デリゲートを設定する条件付きダウンキャストがなぜあるのか不思議です。デリゲート実装が正しく設定されていないと思うので、デリゲートメソッドが呼び出されていないのです。 – Paulw11

答えて

0

間違った代理人を設定しています。デリゲートプロパティが、あなたが実装している方法としてUISearchBarControllerUISearchBarDelegate方法ですので、あなたは `UISearchBarController内に含まれる検索バーのための代理人として、あなたのオブジェクトを設定する必要がありますなぜあなたは`自己をキャストしている

mySearchController.searchBar.delegate = self 
+0

これは、ありがとう! –

+0

通常、 'searchBar(textDidChange:)'を実装して、ユーザのタイプとして検索を実行します。ユーザーが0.5秒間タイピングをやめると検索が実行されるようにタイマーを使用してください。 – Paulw11

+0

textDidChange関数の内部でタイマーを実装するにはどうすればよいですか? –

関連する問題