2017-10-07 7 views
0

私はtableViewを使用して名前のリストを表示しています。ユーザーがセルの1つをタップすると、ポップアップが表示され、詳細が表示されます。私はこの機能を使用して、ユーザーがタップしたセルを確認しています。 Swiftを使用してtableViewでタップされたセルを知る方法

var selectedCell: Int? 

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    print("This cell from the chat list was selected: \(indexPath.row)") 
    selectedCell = indexPath.row 
} 
残念ながら、0と2の間の乱数を返すようです(私は現在3つのセルが表示されています)。

どのセルがタップされたかわかりましたか?

ありがとうございます。

編集:

私の結果を偽っていることを理解しました。

私は、この機能を使用して、どのセルが別のビューコントローラ(ConversationViewcontrollerという名前)に選択されているかをプッシュします。しかし、segue関数はtableView関数の前に呼び出され、segueは前に選択したセルをプッシュします。どうすればこの問題を修正できますか?ここで

は私のセグエのためのコードは次のとおりです。

//SEGUE: Cell was selected: pass chatID 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
     if segue.identifier == "OpenChat" { 
      if let toViewController = segue.destination as? ConversationViewController { 
       toViewController.chatIdentifier = selectedCell 
      } 
     } 
    } 

おかげで再び。

+0

を使用したい場合は、この

var selectedCell: IndexPath override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { print("This cell from the chat list was selected: \(indexPath.row)") selectedCell = indexPath } 

を試してみてください。 'indexPath.row'はあなたがタップした行です。 – rmaddy

+0

正しく動作しているようです。 3つのセルがある場合、最初のindexpath.rowは0、2番目は1、次に2になります。 –

+0

デリゲートとdaatasourceの両方をテーブルビューに割り当てることを確認します – Alexander

答えて

1

あなたはあなたが投稿したコードが正しいコードであるIndexPath

self.selectedCell?.row 
関連する問題