公開中のアプリ

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

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

今回はCancelボタンの実装をしていきます。

今回の実装結果

今回はモーダルウィンドウの時とShowウィンドウの時、両方でCancelボタンが使えるように実装します。

現状のおさらい

現状ではCancelボタンを押した時、メモを追加する+ボタンを押した時に表示されるモーダルウィンドウを閉じると言うコードしか書かれていません。
下記コードがそのコード部分です。
(MemoViewController.swiftに書かれています)

@IBAction func cancel(_ sender: Any) {
    self.dismiss(animated: true, completion: nil)
}

2行目で書かれている「dismiss」と言う命令はモーダルウィンドウを閉じる為の命令です。
なので、編集画面はモーダルウィンドウではないので「dismiss」命令は使えません。

今回、実装する内容としては、Cancelボタンが押された時、モーダルだった場合とそうでなかった場合で分岐してあげます。

モーダルウィンドウだった場合の処理

まずはモーダルウィンドウだった場合のコードを見てみましょう!
MemoViewController.swiftの中のCancelを押した時に実行される「cancelメソッド」を編集します。

@IBAction func cancel(_ sender: Any) {
    if self.presentingViewController is UINavigationController {
        self.dismiss(animated: true, completion: nil)
    }

2行目のif文の説明をします。

ちょっとややこしいのですが、モーダルで表示した時は「presentingViewController」に現在表示しているViewControllerがセットされています。(そう言うものだと思って下さい)

今回モーダルの場合、「NavigationController」を介して表示しているので、「presentingViewController」にセットされているのは「NavigationController」のはずです。
なので「presentingViewController」が「NavigationController」だったらモーダルなんだって言う判定の仕方をしています。

モダールだった場合の処理は3行目です。
先ほどおさらいした「dismiss」をそのまま使えばOKです!

モーダルじゃなかった場合の処理

次はモダールじゃなかった場合の処理です。
先ほどのif文にelseで条件分岐しています。

@IBAction func cancel(_ sender: Any) {
    if self.presentingViewController is UINavigationController {
        self.dismiss(animated: true, completion: nil)
    } else {
        self.navigationController?.popViewController(animated: true)
    }
}

編集画面はモーダルではなく「Show」を選択したのを覚えていますか?
「Show」を選択した場合、戻るには「popViewController」と言う命令を使います。
5行目のように書けばOKです!
ここもこう言うものだと思ってしまって大丈夫かなと思います。

まとめ

今回はモーダルウィンドウの時とShowウィンドウの時、両方でCancelボタンが使えるように実装しました!

次回はデータの更新を実装します。
今のままでは編集してSaveボタンを押したらデータが上書きされるのではなくデータが追加されてしまっているのでそれを直します。

コメントを残す

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

アプリ