LoginSignup
2
2

More than 3 years have passed since last update.

tableviewcellのindexPathの値を次の画面に受け渡す方法

Posted at

筆者の状況

まず英語の単語帳アプリを作成していて、DBはRealmを使用しております。

そこでビューコントローラー間の値の受け渡しにはまったので共有します。

したかったこと

単語を追加して
登録した単語がセルに追加される
登録した単語のセルをタップしたら
そのセルの詳細が見れる

セルをタップしてそのセルの番号を取得←

これがむずかった!

git

ソースコードは以下にあります。

まだ作成途中なので日々更新されるかもです。

流れ

流れはこんな感じになっております。

スクリーンショット 2020-01-31 18.39.50.png

ソースの説明をしていきます

※細かい全てのソースの説明は致しませんのでご了承ください。

まずセルの番号を記憶しておく変数を作成します。

var indexNum = 0

これはviewDidLoadの外辺りに書いておきます。

次にセルをタップしたときに走るコードは

didSelectRowAt

になるので

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    tableView.deselectRow(at: indexPath, animated: true)
    indexNum = indexPath.row
    performSegue(withIdentifier: "toNextViewController", sender: nil)
}

と書きます。

indexPathでタップしたセルの番号が分かりますので

indexNum = indexPath.row

でとりあえず作成しておいた変数にタップした時のセルの番号を代入します。

しかしタップした時のセルの番号を変数に代入しただけなので次のビューに値を受け渡すことができません。

なのでprepare for segueをoverrideをします。

override func prepare(for segue: UIStoryboardSegue, sender: Any!) {
    if (segue.identifier == "toNextViewController") {
        let nextVC: NextViewController = (segue.destination as? NextViewController)!
        nextVC.num = indexNum
    }
}

ここでは次のビューコントローラーに値を渡すことができます。

let nextVC: NextViewController = (segue.destination as? NextViewController)!

変数に次のビューコントローラーのセグエを代入します。

nextVC.num = indexNum

で次のビューコントローラーのnumという変数にindexNumを代入しました。

しかしこのままでは動きません。

次のビューコントローラー、今回の場合はNextViewControllerにnumという変数を用意しておきます。

var num = Int()

するとセルをタップしたときにnumという変数の中にindexPathで取得したセルの番号が入っているはずです。

うまくわからないので

print(num)

してもらえばうまく値を受け渡せているのがわかるかと思います。

まとめ

単なる値の受け渡しにかなり手こずりましたが一度経験してしまえば次からはすぐなのでうまく対処することができて良いですね。

だいぶswiftのことわかってきたので一気にSNSとか作ってみます。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2