2017-01-06 9 views
2

TableViewViewControllerの内部でdidSelectRowAtメソッドが機能するのに問題があります。私はすでにテーブルのdelegatedata sourceViewControllerコードに設定されていることを確認しました。このViewControllertableviewセルに検索クエリの結果をAPIに入力し、セルデータのレンダリングが正常に動作しています。didSelectRowAtをTableViewで使用することができません

登録していないのはちょうどdidSelectRowAtメソッドです。私は手動でMain.storyboardに同じデリゲート情報を追加しようとしましたが、少し+という記号はポップアップウィンドウをトリガーしません。 Main.storyboardに修正が必要なものがあるかどうか疑問に思っています。 ViewControllerTableView接続インスペクタの画像も添付しました。私はiOS開発の初心者であり、モバイル・デザインのためのグラフィック・インターフェースに関する多くの経験はないので、私はそれが何かだと仮定していますが、おそらく私は間違っています。

ここに私のコードの基本的なバージョンです:

class SearchViewController: UIViewController, UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource { 


@IBOutlet weak var tableView: UITableView! 
@IBOutlet var searchBar: UISearchBar! 

    ...variable declarations .... 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.hideKeyboardWhenTappedAround() 
    searchResults = [] 
    searchBar.delegate = self 
    tableView.dataSource = self 
    tableView.delegate = self 

} 

func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1; 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return searchResults!.count; 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: "searchTableViewCell", for: indexPath) as! SearchTableViewCell 

    if(searchActive && !(self.searchResults?.isEmpty)!) { 
     (doing some stuff with search results here...works fine) 
    } 
    return cell 
} 

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print("hello!") 
} 

func searchBar(_ searchBar: UISearchBar, 
       textDidChange searchText: String) { 
    print("search text \(searchText)") 
    getSearchResultJSON(term: searchText) { json in 
     let data = json as! [Dictionary<String, String>] 
     self.searchResults = data 
    } 
    self.tableView.reloadData() 
    } 
... 
} 

[Viewcontroller connections inspector]

[TableView Connections Inspector]

EDIT:検索非同期機能は何も変更された場合のための健全性チェックとしては、 、私はちょうどすべての検索関連のコードを削除し、ハードコードされたダミー変数配列からtableviewを埋めることを試みた。それはダミー変数を表示するように機能しましたが、セルを選択して反応を得る能力はまだありません。私はdidSelectRow atの代わりにdidDeSelectRowAtを使ってタイプミスをしていたということをいくつか見てきましたが、これは修正されましたが、動作は同じです。

これは、私はあなたがこれを使用して、まあdidDeselectRowAt代わりのdidSelectRowAt

編集

を使用している

+0

viewdidloadメソッドでデリゲート宣言を削除し、ストーリーボードでtableviewデリゲートを設定しようとしました –

+0

テーブルセルの上でタブジェスチャまたはボタンを使用しましたか? –

+2

didDeselectRowAtメソッドを使用しています。 – Niharika

答えて

2

見つけました!原因はself.hideKeyboardWhenTappedAround()でした。これはキーボードを隠すために書いた拡張です。これは実際にUITapGestureRecognizerを利用したので、セルのタップを妨害しました。みなさんのヒントをありがとう。

2

を書いhideKeyboardWhenTappedAround()拡張機能で発生するタップジェスチャーに関連していることになりました代議員の下に

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 

コントローラを準拠させるUIGestureRecognizerDelegate

+0

これは完璧な意味があるので、これは答えだったと言えるでしょうか?しかし、私はちょうどその編集を行い、セルはまだ選択に応答していません – jeanmw

+0

セルをクリックすると "hello"が表示されません。 – Matt

+0

検索の非同期関数が何かを変更していた場合には、印刷されていないメッセージ@Matt – jeanmw

0

メインビューでタップジェスチャを使用している場合、テーブルビューのセルが選択したメソッドが正しく動作していません。

0

あなたがアップロードした画像では、デリゲートとデータソースはViewControllerに接続されていません。 viewdidload(tableview.delegate = self)のコードを削除し、ストーリーボードに接続します。

関連する問題