ViewControllerを閉じる
今、自分で、iPhoneアプリを作っているのですが、
ボタンをタップした時、segueで遷移した先のViewControllerにて [登録]ボタンを押して、登録完了後に、現在、起動中の登録画面の ViewControllerを閉じて、元の遷移元の画面に戻る
みたいな実装をしてたんですが、遷移先のViewControllerで
self.dismissViewControllerAnimated(true, completion: nil)
とか書いても、ViewControllerが閉じないんですよね。
参考先のサイト on Qiita ViewControllerを閉じる
理解が足りないなー、と。
まずは、画面を閉じる方法から。
割りと、[ViewController 閉じる] ってやっても、あんまり引っかからないんですね笑
ちょっと、書いてみました。
参考にさせて頂いた所
いや、すげー、分かりやすかったです。ありがとうございます。
Unwind Segue
Appleの公式サイトからすると、 UnwindSegueってのは、PushとかのSegueから戻る一つの方法って感じですかね。
他にも方法がある、って事なのかな。
Close Sample
今回のソースを Github にあげてます。
[TakahashiIkki/CloseSegueSample @github]
作成方法
サンプルプロジェクトの作成
Single Page Applicationを選択します。
プロジェクト名をCloseSegueSampleとしました。
OrgnizationNameとか隠してるけど、Githubに上げてるなら意味ないのかな?笑
初回は、ViewControllerが一つだけある状態です。
遷移先ViewControllerの作成
まずは、 あるViewController から遷移する遷移先のViewControllerを作成していきます。
今回は、 ViewController から ToViewControllerへ移る事とします。
ToViewControllerクラスを定義します。
NewFileをクリックして、
Cocoa Classs から、ToViewControllerクラスをUIViewControllerを継承して作成します。
はい。出来ました。
必要な簡単なクラスとimportとかだけ整理しました。
InterfaceBuilder上でSegueを定義
InterfaceBuilder上で画面遷移を作成していきます。
画面遷移を作成するのは簡単です。
まず、Main.storyboardを開いて、ViewControllerを追加します。
この追加したのが、ToViewControllerになります。
View Controllerをドラッグして、 現在ある、ViewControllerの横に置きます。
置いたら、こんな感じになります。
わかりやすいように、遷移元のViewControllerを黄色に。 遷移先のToViewControllerを緑色にします。
また、忘れないように、遷移先のToViewControllerを先ほど作ったToViewControllerクラスと結びつくようにします。
次は、ボタンを作成していきます。
開くボタンをクリックすれば、ToViewControllerが開く。 というイメージです。
では、画面遷移を作成します。
controlボタンを押しながら、 開く をクリックして、 そのまま、 ドラッグして、ToViewControllerまでドラッグします。
このようなポップアップが出てくるので、 Show
を選択します。
開くをクリックした時の遷移が作成出来ました。
戻る処理の作成
次は、 戻る処理を 作成していきます。
ここからが、 Unwind Segue の話です。
例によって、戻るボタンを作成します。
ここで、少し、コーディングします。
遷移元 のViewControllerに 記述します。
※ ToViewController側に記述して、はまりました笑
@IBAction func returnToMe(segue: UIStoryboardSegue) { }
これだけです。
また、このメソッド名、 returnTome()
とかじゃなくても何でもいいです。 引数と @IBAction
の指定だけすればいいみたいです。
次に、戻るを押した時と、このreturnToMe()
function を結びつけます。
Main.storyboard を開いて、ToViewController側を表示します。
戻る ボタンを control ボタンを押しながらクリックして、 ドラッグして、 ToViewControllerの上部の一番右にある Exit のアイコンに結びつけます。
また、ポップアップが出てくるので、 ここには、先ほど定義したメソッド名が表示されています。 先ほど定義した、 returnToMe()
メソッドを指定します。
以上で、チェック完了です。
動作確認すると、以下の様な感じです。
動作チェック
初回起動時、ViewController が開きます。 開くをクリックします。
ToViewController が show
segue で表示されました。
戻るボタンで戻ってみます。
スクリーンショットだとあまり説得力はありませんが、ちゃんと戻れました。
github のソースにあげています。
今回のソースを Github にあげてます。
[TakahashiIkki/CloseSegueSample @github]
ViewController を閉じる他の方法
NavigationControllerを使う方法は、まあ置いておくとして、他にあるんだろうか?
そもそも、
self.dismissViewControllerAnimated(true, completion: nil)
なんで動かなかったんだろう?
Qiita読む限りは遷移先で呼ぶメソッドっぽいしなー。
って事でまだまだ、 Swifter
には程遠いです。
。。。ってか、ブログなっがーー。。
書くので疲れた。