実現したいこと
TableViewのセルをタップした時に、別画面に遷移させたい。(←できました)
遷移させる際にセルの情報を取得したい。(←できません)
試したこと
画面を遷移させるために、別画面のViewControllerを用意し、TableViewが表示されているViewControllerとSegueを使って連結しました。
didSelectRowAt
の中身にperformSegue
を置いて画面遷移ができるようにしました。
Swift
1func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 2 3 performSegue(withIdentifier: "transEdit", sender: nil) 4 5 }
すでに他の画面遷移を実装しているため、prepare(for segue)
の内部でif文を使って条件分岐させたいと考え、if segue.identifier == "transEdit"
の中で、displayedContentList[IndexPath.row]
を使ってセルの情報を取得しようとしました。(下記の3番目のif文)
Swift
1override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 2 3 if segue.identifier == "transAdd" { 4 5 6 let addVC = segue.destination as! AddViewController 7 addVC.delegate = self 8 9 } 10 11 if segue.identifier == "transScreen" { 12 13 let screenVC = segue.destination as! ScreenViewController 14 screenVC.screenContentList = displayedContentList 15 } 16 17 if segue.identifier == "transEdit" { 18 19 let editVC = segue.destination as! EditViewController 20 editVC.editContentLabel.text = displayedContentList[indexPath.row] 21 22 }
その結果、下記のエラーメッセージが表示されました。
Thread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
考えたこと
indexPath
はTableViewの要素?なので、prepare(for segue)
メソッドの中で使えないのではないかと考えましたが、他のやり方が思いつきません。すでに他の画面遷移を実装している状態で、didSelectRowAt
から画面遷移ができるようにする良い方法はあるでしょうか?
ご教授願います。
追記
Main.storyboardの画面遷移図です。今回繋げたいのは、左上のViewControllerと左下のEditViewControllerです。
修正したViewController.swift
Swift
1 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 2 3 guard let editVC = storyboard?.instantiateViewController(identifier: "EditViewController") as? EditViewController else { return } 4 editVC.editContentLabel.text = displayedContentList[indexPath.row] 5 self.performSegue(withIdentifier: "transEdit", sender: nil) 6 7 } 8
EditViewController.swift
Swift
1class EditViewController: UIViewController { 2 3 @IBOutlet weak var editContentLabel: UILabel! 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 }
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。