スポンサーリンク

【Swift】UI画面にAlertを表示させてAlertからのSegue画面移動時に変数を引き継ぐSwiftコード。

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

Alert画面での画面遷移で変数の受け渡しを行う方法。

前回の記事でAlert表示にて画面繊維を行う方法について記載いたしました。
その続きというかよく一緒に利用されるであろう、変数の受け渡しをAlert画面を用いて行って見ましょう。

前回の記事は下記ですのでAlertでの画面遷移方法は下記記事を参照ください。

この記事にある様にコードは下記にしておいてください。

import UIKit

class ViewController: UIViewController {
    

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
    }
    
    @IBAction func test1(_ 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
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                    // 0.5秒後に実行したい処理
                     self.performSegue(withIdentifier: "test_segue1", sender: nil)
                    }
                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)
        }
    }

Segueのidは上記コードのtest_segue1に設定しております。XcodeのSegueのマーク(viewControllerを繋いでいる四角い小さいやつ)をクリックして、右側の設定画面にて設定してください。

まずはこのコードに下記を追記してください。

import UIKit

class ViewController: UIViewController {
    

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
    }
// /////////追記場所/////////////////////////////////////
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        let test_word = "test"
        // segueのIDを確認して特定のsegueのときのみ動作させる
        if segue.identifier == "test_segue1" {
            // 2. 遷移先のViewControllerを取得
            let next = segue.destination as? test2ViewController
            // 3. 1で用意した遷移先の変数に値を渡す
            next?.outputValue = test_word
        }
    }
// /////////////////////////////////////////////////////
    @IBAction func test1(_ 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
                DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
                    // 0.5秒後に実行したい処理
                     self.performSegue(withIdentifier: "test_segue1", sender: nil)
                    }
                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)
        }
    }

super.viewDidLoad()のすぐ下に別の関数として次のページにあたるviewcontrollerに行くためのSegueを探して次のviewcontrollerをインスタンス化しています。
そのインスタンス化したもののなかの変数にこちらの元ページのviewcontrolleから取ってきた変数値を代入しているという流れです。

もちろん次のページ用のviewcontrollerにも設定を記載する必要はあります。

import UIKit

class test2ViewController: UIViewController {

    
    @IBOutlet weak var test_label0: UILabel!
    var outputValue : String?
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        test_label0.text = outputValue

        // Do any additional setup after loading the view.
    }

class名も先ほどのコードに合わせます。

これで別ファイル間での変数を渡すことができています。

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

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

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

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

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

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

コメント

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