質問: ### 前提・実現したいこと segue(show)が戻るときにホーム画面のTableViewのセルを選択解除したい。 Storyboardにてsegue(show)を設定し、 ホーム画面(HomwViewController)のセルをクリックすると予定詳細画面(PlanDetailsViewController)に遷移するようにしています。 ![Storyboard](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/d4bbe6395c02a96b36b57c7631ea9eab.png) ↓ホーム画面(HomeViewController) ![ホーム画面](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/e4a53fb60c3599776619ab055aa514b1.png) 「劇場版あいうえお」セルをクリックすると、 ↓予定詳細画面(PlanDetailsViewController)に遷移 ![予定詳細画面](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/15cfa60e353028511ec837d4d69ca538.png) 予定詳細画面のナビゲーションバーの「< ホーム」をクリックして戻ったとき、 ホーム画面のセルを選択解除したいです。 ### 発生している問題 現在は選択状態です。 ![ホーム画面 選択状態](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/f44a472d4713e9e7019bcfb14f2b66fa.png) ### 該当のソースコード 以前はセルクリックと同時に解除していたので(現在は無効にしています)以下のように書いていたのですが、 ``` func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) } ``` そうではなく、segueが戻ったときに実装したいんですよね。 ### 試したこと 上のようなコードを`tableView(_:cellForRowAt:)`や`viewDidLoad()`に書いてみたのですが、うまくいかず。 「< ホーム」ボタンに関しても、自分で実装したものではなくsegue(show)を繋いだときに自動生成されたものなので扱い方がよくわかりませんでした。 ### 補足情報(FW/ツールのバージョンなど) Xcode 11.5 Swift 4.2 ここまで読んでくださり、ありがとうございます。 全体のソースコードがあったほうが回答しやすい、などございましたらお申し付けください。
回答: おそらく、 * 遷移画面から戻ってきたタイミングで「選択状態を消す」 ということを実現されたいのかとおもます。 戻ってきた時のアニメーションが終わった時に呼び出されるメソッドは`viewDidAppear(_:)`なので、この中でセルの選択解除を行えばいいかと思います。 * viewDidAppear(_:) Notifies the view controller that its view was added to a view hierarchy. ちなみに、`viewDidAppear(_:)`は、初回起動時など tableView が選択されていない時も呼び出されますので、そのような状態になっているか否かを判別する必要もありそうです。 ``` override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) print(#function) if let indexPatth = tableView.indexPathForSelectedRow { tableView.deselectRow(at: indexPatth, animated: true) } } ``` `indexPathForSelectedRow`の値を見て、必要であれば選択解除を行うような処理の流れとなります。 * indexPathForSelectedRow An index path identifying the row and section of the selected row. ちなみに、`print(#function)`は呼び出された時点で処理しているメソッド(関数名)を表示します。 どこにどのような処理を入れれば良いのかは、公式ドキュメントのほか、実際にメソッドが呼び出されるタイミングを見て判断するのも一つの方法かと思います。 > > 「< ホーム」ボタンに関しても、自分で実装したものではなくsegue(show)を繋いだときに自動生成されたものなので扱い方がよくわかりませんでした。 > > > おそらく、UINavigationController と組み合わせて使われているのではないでしょうか。使われている場合には、Segue で接続すると自動的に階層構造を作ってくれるようになっています。