[iOS8] Swiftでdelegateを使ったモーダル間の値渡し

Pocket

モーダルを呼び出し、呼び出し元のコントローラーに値を渡す時のSwiftでの書き方について説明していきます。

screenshot

サンプルコードはこちらから
https://github.com/eversense/Swift-Delegate-Modal-Example

今回はメインとなるViewとモーダルとなるViewの2つを用意していきます。
・ParentViewController:メインとなる画面(値の受け取り側)
・ModalViewController:モーダルの画面(値の送り側)

まずはモーダル画面のModalViewControllerから見ていきます。

delegateを使うため、protocolでModalViewControllerDelegate設定します。delegateで使うメソッドのmodalDidFinishedを示しておきます。このmodalDidFinishedをParentViewControllerでメソッドを書く必要があります。

Submitのボタンを押すと、modalDidFinishedにtext1のフォームに入力されたテキストを送るようにしてあります。

次にメイン画面のParentViewControllerをみてみましょう。

showModalBtnをタップすることでモーダル画面を表示させるようにしています。モーダルの呼び出しにはpresentViewControllerを使います。

モーダル側のデリゲートとして設定されたmodalDidFinishedを使い、モーダルの終了処理と渡された値を取得して、処理を書きます。今回はモーダル側のテキストフィールドに書かれたテキストを、メイン側のラベルに入れてみました。

以上が、デリゲートを使ったモーダルの値渡しでした。

サンプルコードはこちらから
https://github.com/eversense/Swift-Delegate-Modal-Example

Objective-C時代はこのデリゲートの方法が一般的だったかと思います。Swiftになり、さらに別の手段もあるかも。知っている方がいましたらぜひコメントください!

Comments

comments