スポンサーリンク

【Swift】Alertボタンから画面遷移を行う方法。(Navigation Controllerにも対応)

Swift
スポンサーリンク
スポンサーリンク

【Swift】Alertボタンから画面遷移を行う方法。

今回の記事ではXcodeの画面遷移の際にAlertボタン(下記)からページ遷移を行う方法について記載いたします。

下記のコードを参照にしています。
参照というかマルパクリ感否めませんがまずはAlertの表示を下記で行い、buttonをクリックするとAlertの表示がされる様にしてみてください。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
    }

    @IBAction func test_alert(_ sender: Any) {
        let alert: UIAlertController = UIAlertController(title: "アラート表示", message: "保存してもいいですか?", preferredStyle:  UIAlertController.Style.alert)

        // ② Actionの設定
        // Action初期化時にタイトル, スタイル, 押された時に実行されるハンドラを指定する
        // 第3引数のUIAlertActionStyleでボタンのスタイルを指定する
        // OKボタン
        let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
            // ボタンが押された時の処理を書く(クロージャ実装)
            (action: UIAlertAction!) -> Void in
            print("OK")
        })
        // キャンセルボタン
        let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: UIAlertAction.Style.cancel, handler:{
            // ボタンが押された時の処理を書く(クロージャ実装)
            (action: UIAlertAction!) -> Void in
            print("Cancel")
        })

        // ③ UIAlertControllerにActionを追加
        alert.addAction(cancelAction)
        alert.addAction(defaultAction)

        // ④ Alertを表示
        present(alert, animated: true, completion: nil)
    }   
}

Alertの説明も記載しているので参考にしてください。

ボタンの「OK」を押せば画面遷移、キャンセルを押せば元のボタンのページに行く様にします。

Alert表示ボタンクリック の処理

Segueを設定します。
設定方法は下記の画面キャプチャをご覧ください。

let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
                // ボタンが押された時の処理を書く(クロージャ実装)
                (action: UIAlertAction!) -> Void in
                print("OK")
            })

まずこの部分に注目です。
この部分は実はボタンを押した後の操作を記載する場所になっています。
ここにSegueを使用して移動する場合の操作は下記の様になります。

let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
                // ボタンが押された時の処理を書く(クロージャ実装)
                (action: UIAlertAction!) -> Void in
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                // 0.5秒後に実行したい処理
                 self.performSegue(withIdentifier: "test2", sender: nil)
                }
                print("OK")
            })

DispatchQueueはカッコ内以外の処理をストップさせるメソッドになっており、またmainスレッドを指定しています。このmainスレッドはUI操作を行えるスレッドを表しています。

この操作を止めている間にページ遷移を行うというのがこのメソッドの使い方です。

ページ遷移に関しては 、Segueを指定してそのSegueを使用しての移動になっております。
なんだかんだSegueでの移動が見た目もわかりやすく好きです。まあ、ただ慣れているだけなのですが笑。

ちなみにSegueのつなぎ方はボタンから出すのではなく上の丸ボタンから移動さきのページに伸ばします。(下記)

この選択肢はpushを選べば上記の様なbackボタンが出てきます。

その他の遷移気になるかたは入り色試していただきたいのですが特に使うものはモーダルかと思われます。
こちらは現在のスクリーンの上に覆いかぶさる様な感じで、スクリーンのどこまでを覆うか指定もできます。(初期値は上が少しだけ前の画面のままになっていると思われます。)

こちらのモーダル移動の際も先ほどのコードでalertから移動可能です。
Segueの設定のみ変更してください。

またこちらPush移動、モーダル移動両方行っているのでNavigation controllerの場合でもコードに変化がないことはわかっていただけるかと思います。
では後ろのページに戻る場合はどうでしょうか。

Push移動の際はbackボタンを押せば元に戻れます。

ではモーダル移動の場合はどうすれば良いのかというと下記をalertに組み込んでOKをおすと戻れる様になります。

let defaultAction: UIAlertAction = UIAlertAction(title: "OK", style: UIAlertAction.Style.default, handler:{
                // ボタンが押された時の処理を書く(クロージャ実装)
                (action: UIAlertAction!) -> Void in
                self.dismiss(animated: true, completion: nil)
                
                print("OK")
            })

こちらはSegueを使用せずにページを消去するイメージになっております。

今回の記事は異常です。
alertの操作方法(特にページ移動)についてでした。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Swift
スポンサーリンク
スポンサーリンク

コメント

  1. […] 【Swift】Alertボタンから画面遷移を行う方法。(Navigation Controllerにも対応) […]

  2. […] 【Swift】Alertボタンから画面遷移を行う方法。(Navigation Controllerにも対応) […]

タイトルとURLをコピーしました