###前提・実現したいこと
UITableViewのセルをタップした際、画面遷移をする仕組みを作っています。
遷移元を画面A、遷移先を画面Bと呼ばせていただきます。
画面Bにも別のUITableViewが存在し、同様にセルをタップすると画面Aに戻ります。
###発生している問題・エラーメッセージ
画面Aにて一度セルをタップし、画面Bに遷移するのは想定通りにうまくいきました。また、画面Bでセルをタップするときちんと画面Aに戻ります。
しかし、2度以上同じ動作をしようとすると、2度目以降、
画面Aでの1回目のタップが反応せず、2回目でようやく画面遷移が起こります。
###該当のソースコード
<画面Aにおけるセル選択とSegue設定部分>
swift
1//画面Bから戻って来たときに、セルをdeselect 2 override func viewWillAppear(_ animated: Bool) { 3 super.viewWillAppear(animated) 4 if let indexPathForSelectedRow = lectureSettingTableView.indexPathForSelectedRow { 5 lectureSettingTableView.deselectRow(at: indexPathForSelectedRow, animated: true) 6 print("Deselect") 7 } 8 } 9//セルが選択された際、segueを起動。 10 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 11 print("I'm selected") 12 performSegue(withIdentifier: "toNextView", sender: nil) 13 }
<画面BにおけるSegue設定部分>
swift
1func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 2 performSegue(withIdentifier: "goBack", sender: nil) 3 }
###試したこと
動作の各所に上記の通りprint()を挟み、正常に機能しているか確認しました。
すると、画面Bから画面Aへ戻って来たときには"Deselect"が出力され、正常にdeselectされていることがわかりました。
しかし、画面Aにおける2度目以降(画面Bから戻って来て以降)のセルタップ時には
・1回目タップ:print("I'm Selected")だけが行われる
→2回目タップ:performSegueが呼ばれる(画面Bに遷移する)
と動作していることがわかりました。
セルがdeselectされておらず、一回のタップではselectされないのが原因かと考えていたのですが、どうやら違うようです。原因が思い当たらず困惑しております。
何か、この辺が怪しい、などでも構いませんのでヒントをいただけると助かります。
よろしくお願いいたします。
###補足情報(言語/FW/ツール等のバージョンなど)
swift3、Xcode8を使用。
あなたの回答
tips
プレビュー