
※この記事は初心者の方や初めてアプリを作る人を対象にしています。
動作環境 Xcode Version 11.4 Swift version 5.2
今回はSaveボタンを押した時にモダールウィンドウが閉じてメモが追加される仕組みを作っていきます。
prepareメソッドとは遷移が行われる前に実行されるメソッドの事です。
今回の場合Saveボタンを押したらモーダルウィンドウが閉じてTableViewに戻るのでその時に実行されるメソッドです。
このMemoViewController.swiftに最初からコメントアウトして書いてありますので、まず下記のようにコメントアウトを消しておきましょう。
(ちなみに必要のないコメントは消した状態です)
この中にTableViewにメモが追加できるようにコードを書いていきます。
// /* ← これ消す
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
}
// */ ← これ消す
まず最初にやることがSaveボタンを押した時の処理かどうかをチェックしたいので、Saveボタンを変数にします。
では先ほど紹介したprepareメソッドにコードを書いていきます。
その前にもう一度流れを確認したいと思います。
今、テキストフィールドに何らかのテキストを入力してそれをセーブしてTableViewのメモのリストに追加しようとしています。
(自分でアプリを操作するイメージを持つと理解しやすくなると思います)
次に、これからprepareメソッド書くコードを整理しておきましょう。
①セーブボタンが押された時にそのボタンがセーブボタンなのかをチェック。
②セーブボタンだったらテキストフィールドの文字を「変数memo」に代入。
では下記コードを見てみましょう!
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let button = sender as? UIBarButtonItem, button === self.saveButton else {
return
}
self.memo = self.memoTextField.text ?? ""
}
では説明しますね。
問題は2行目なのでじっくり説明したいと思います。
Saveボタンを押した時の処理だったらsenderにsaveButtonが入って来るのでguradでチェックします。
(guardについてはこちらの記事を読んでみてください)
まずは「guard」と書いてその後「let button」で定数buttonを定義しています。
その定数buttonにsenderを入れるのですが、「as? UIBarButtonItem」で型キャストしています。
(型キャストについてはこちらの記事を読んでみてください)
その次の「button === self.saveButton」で定数buttonが先ほど紐づけた変数saveButtonと同じオブジェクトかどうかチェックしています。
(===は同じオブジェクトかどうか)
ここで違うオブジェクトだった場合に処理を止めたいので「else{}」としてあげて「return」としています。
同じオブジェクトだったら変数memoにテキストフィールドに入力されたテキストを代入してあげます。
「?? “”」でnilだったら空文字になるようにしています。
(何もテキスト入力せずにSaveボタンを押す可能性があるので)
今回の記事でSaveボタンを押した時にモダールウィンドウが閉じてメモが追加される仕組みができました?
いいえ、、実はまだできていません。
テキストフィールドに入力したテキストを変数memoに代入しただけなので、そのデータをTableViewに渡して表示させないといけません。
それは次回の記事で実装します!
[…] ※この記事は初心者の方や初めてアプリを作る人を対象にしています。動作環境 Xcode Version 11.4 Swift version 5.2今回は前回できていなかった「変数memo」に代入した値をTableViewの方で受け取る仕組みを説明します。 […]