スポンサーリンク

【Swift】Delegateでページ遷移時にUI画面(View)を更新する方法。

Swift
スポンサーリンク

今回の記事はページ遷移後にページを更新するためにdelegateを設定してページ遷移後に走る処理を指定する方法をご紹介します。

自作のdelegateを使用せずに「ViewDidAppear」を使用する簡単な方法は下記記事を参考にしてみてください。

【Swift】viewDidAppearを使ってページ遷移時に画面の更新を行う方法。

スポンサーリンク

ページ遷移時に「Delegate」を使用する

このページ移動時のDelegateという仕組みによって今回は画面の更新を行います。画面の更新とは「viewdidload」を行うことを今回は指します。流れを説明すると下記のようなイメージです。

「ページ1(viewdidloadで画面作成)」→「ボタンクリックで移動」→「ページ2(viewdidloadで画面構成)」

ここまでは通常の処理として動くのでページ1で変更した変数などはページ2でうまく更新されています。

「ページ1(viewdidloadで画面作成)」→「ボタンクリックで移動」→「ページ2(viewdidloadで画面構成)」→「ページ2でページ1に関係する変数変更」→「ページ戻る(ページ2でボタンクリックにてページ1に戻る )」→「ページ2で変更した値がページ1で更新されていない」

このことからページを戻る際は「viewdidload」が行われていないことがわかります。その為、画面更新を行うには「delegate」を入れて下記のように設定を行う必要があります。

「ページ1(viewdidloadで画面作成)」→「ボタンクリックで移動」→「ページ2(viewdidloadで画面構成)」→「ページ2でページ1に関係する変数変更」→「ページ戻る(ページ2でボタンクリックにてページ1に戻る+delegate起動 )」→「delegateとセットのProtocolで関数(viewdidload)を起動」→「ページ2で変更した値がページ1で更新されていない」

では上記の設定を行うためにどのように行なっていくかを確認してみましょう。

ページ移動先から戻る際に元ページ更新方法

delegate作成方法

まずは移動前のページ1に下記のような表記を行います。

import ...

protocol TestDelegate {
    func test()
}

class ViewController: UIViewController,TestDelegate {
    func test() {
        viewDidLoad()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
//...(省略)...

    @IBAction func to_page2(_ sender: Any) {
        let page2 = self.storyboard?.instantiateViewController(withIdentifier: "page2") as! Page2
        //let [変数名] = self.storyboard?.instantiateViewController(withIdentifier: "[移動先のページidentifer名]") as! [移動先のクラス名】       
        //使用するdelegate,こちらをclassの横にも書きます。
        page2.TestDelegate = self
        //ページ移動の関数
        self.present(page2,animated: true,completion: nil)
        //下記の「performSegue」ではダメでした。?
        //self.performSegue(withIdentifier: "page2", sender: nil)
    }
}

ここではまだページ2の設定ができていないのでエラーになっていますが気にせずに。また、「performSegue」ではdelegateがうまく働きません。

次にページ2に記載する内容をみていきましょう。

import ...

class Page2: UIViewController {
    
    //delegateを設定
    var TestDelegate:TestDelegate!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // Do any additional setup after loading the view.
    }
    
    @IBAction func back_page1(_ sender: Any) {
        //下記の「performSegue」でもこちらはOKです。
        //self.performSegue(withIdentifier: "page1", sender: nil)
        dismiss(animated: true, completion: {
            //設定したdelegateのtest関数を起動する
            self.TestDelegate.test()
        })        
    }
}
    

上記でdelegateとセットのprotocolに格納したtest関数をページを戻る際に実行することができるのでページ更新ができます。

値などをセットして簡単なものから設定してみてください。

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

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

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

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

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

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

コメント

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