swiftを勉強中の者です。
あるView(A画面)からモーダルでView(B画面)を表示させ、
そこで行った処理(具体的はUserDefaultsの書き換え)を元のビュー(A画面)に反映させたいと思っています。
A画面のviewDidAppear内に処理を書けば実行されるものと思っていたのですが、
swift
1dismissViewControllerAnimated(true, completion: nil)
で戻るとviewDidAppearは通らないことがわかりました。
どうしたら元のビューに反映ができるのでしょうか?
ご教授頂けると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
A画面のviewDidAppear
は呼ばれるはずです。
本当に呼ばれていないのか、それとも、呼ばれているけど反映されないのか、まずは確認してみるのが良いと思います。
ちなみに、こちらのテストではdismissViewControllerAnimated
以降の処理の流れは下記のようになっています。
[A画面] viewWillAppear [B画面] viewWillLayoutSubviews [B画面] viewDidLayoutSubviews [A画面] viewWillLayoutSubviews [A画面] viewDidLayoutSubviews [A画面] viewDidAppear [A画面] viewWillLayoutSubviews [A画面] viewDidLayoutSubviews
投稿2016/03/30 07:25
総合スコア16731
0
ベストアンサー
delegateを使って値の受渡しをしてはどうでしょうか。
- B画面にA画面の型でdelegateのプロパティを用意
- A画面にUserDefaultsからの読み出しを実行できるメソッドを用意
- A画面からB画面を呼び出すときにdelegateにself(A画面)をセット
- B画面でUserDefaultsの書き込み完了後から画面破棄までのどこかのタイミングでdelegate.2)のメソッドを実行
注意点としては、メモリリークを避けるために1)のプロパティはweakで持つことです。
投稿2016/03/29 08:06
総合スコア21
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/30 05:50
2016/03/30 07:04
2016/03/30 09:15
2016/03/30 09:42
0
self.dismissViewControllerAnimated(true, completion: { self.delegate?.DidFinishedModal() )
のようにデリゲートを使ってモーダルの内容を別のVCに渡すことができます
投稿2016/03/29 08:03
編集2016/03/29 08:04総合スコア19
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。