公開中のアプリ

[Xcode11・Swift5]メモアプリを作る#13

※この記事は初心者の方や初めてアプリを作る人を対象にしています。
動作環境 Xcode Version 11.4 Swift version 5.2

では前回の続きをやりましょう!

今回はメモをタップして遷移した画面にメモの内容を渡すところまで

タップしたメモを遷移先の画面に渡そう

引き続きメモを編集する実装をしたいと思います。
ここでは、タップしたメモの情報を遷移先の画面に渡したいと思います。

例えば 「まゆげじお」と言う行をタップして編集する場合、画面遷移した時に「まゆげじお」と言うテキストがテキストフィールドに既にセットされている必要があるからです。
編集しようとしてるのにテキストフィールドが空だとちょっと変ですよね?

では早速コードを見てみましょう!

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destination.
    // Pass the selected object to the new view controller.
    guard let identifier = segue.identifier else {
        return
    }
    if identifier == "editMemo" {
        let memoVC = segue.destination as! MemoViewController
        memoVC.memo = self.memos[(self.tableView.indexPathForSelectedRow?.row)!]
    }
}

今回コードを書くファイルは「MemoTableViewController.swift」です。
この中に「prepareメソッド」が既に書いてあるのでコメントアウトして使いましょう。

「prepareメソッド」はメモをタップした時、次の画面に遷移する前に呼ばれるメソッドです。

まず4行目〜6行目の部分を説明します。
ここではguardを使い「segue.identifier」を「定数identifier」に代入しています。
もしうまくいかなかったら「return」で処理を止めます。

次に7行目です。
もし先ほどの「定数identifier」が「editMemo」だった場合{ }の中の処理を実行します。

8行目です。
遷移先のMemoViewControllerを型キャストしつつ「let memoVC」に代入しています。

9行目です。
8行目の「let memoVC」にタップされた行のメモ(テキスト)を代入しています。

遷移先で受け取ろう

先ほど渡したデータを遷移先で受け取るコードを書いて行きます。
ではコードを見てみましょう!

class MemoViewController: UIViewController {
    
    var memo: String?
    @IBOutlet weak var memoTextField: UITextField!
    @IBOutlet weak var saveButton: UIBarButtonItem!
    
override func viewDidLoad() {
    super.viewDidLoad()
    self.saveButton.isEnabled = false
    
    if let memo = self.memo {
        self.memoTextField.text = memo
    }
}

今回コードを書くファイルは遷移先の「MemoViewController.swift」です。
追加したコードは11行目〜13行目です。
「MemoViewController」に遷移した時に呼ばれる「viewDidLoadメソッド」の中に記述します。

先ほど渡したメモ(テキスト)がうまく渡せていれば、3行目の「var memo」に値が代入されています。

11行目〜13行目で、その値をテキストフィールドにセットしています。

まとめ

今回はメモをタップしたら編集画面に遷移して、その時にメモのデータを遷移先のテキストフィールドに表示させると言うところまで実装しました!

次回から画面のタイトルを変更したり細かい部分の修正をしたいと思います!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

アプリ