質問させてください。
現在アプリをMVPパターンで作成しています。
NavigationControllerの下にviewControllerA -> viewControllerB
と配置しています。それぞれにpresenterを持っています。
データはpresenterが持っている状態です。
順当に次にshowでviewを表示する時はデータを普通にsegueで渡せばいいのですが、
逆に戻る時データを渡すのはどのようにするのが一般的なのでしょうか?
例えば、住所録などのアプリで、各ユーザーに勤務先会社情報を持たせる場合、
会社情報をviewControllerBで入力した場合、入力し終わり戻る時、
そのデータをpresenterから1個上の階層のpresenterに渡したいのですが、
どのように実限するべきなんでしょうか?
下の階層に渡すページはいくらでもありますが、
逆に戻る時にデータを渡す方法が解説されているページは調べてもあまりなさそうでした。
presenterB (storyboardID利用)-> veiwcontrollerA (ただのfunc)-> presenterA へ
橋渡しすればできますか???
-> 試してみましたが、できませんでした。
追伸、サンプルコードかなりアバウトに書いてて、間違ってました。修正しました。
Swift
1struct AddressBook { 2 let user: String 3 let companyInfo: CompanyInfo? 4} 5 6strunt CompanyInfo { 7 let name: String 8 let address: String 9 let tel: String 10} 11 12//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 13// ViewControllerA 14import UIKit 15class ViewAViewController: UIViewController { 16 private let viewAPresenter = viewAPresenter() 17 var addressBook: AddressBook = AddressBook(user: "田中太郎", companyInfo: nil) 18} 19 override func viewDidLoad() { 20 self.viewAPresenter.viewA = self 21 } 22 23 override func viewWillAppear(_ animated: Bool) { 24 self.viewAPresenter.viewWillAppear(data: addressBook) 25 } 26} 27extention ViewAViewContorller: ViewDelegate { 28} 29 30// ViewAPresenter 31import Foundation 32class ViewAPresenter { 33 weak var ViewA: AddHospitalDelegate? 34 var addressBook: AddressBook! 35 36 func viewWillAppear(data: AddressBook) { 37 self.addressBook = data 38 print(self.addressBook) 39 } 40} 41 42// ViewADelegate 43protocol ViewADelegate : class { 44} 45 46//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 47// ViewControllerB 48import UIKit 49class ViewBViewController: UIViewController { 50 private let viewBPresenter = viewBPresenter() 51 override func viewDidLoad() { 52 self.viewBPresenter.viewB = self 53 } 54 55 override func viewWillDisappear(_ animated: Bool) { 56 self.viewBPresenter.viewWillDisappear() 57 } 58} 59 60extention ViewBViewContorller: ViewDelegate { 61} 62 63// ViewBPresenter 64import Foundation 65class ViewBPresenter { 66 weak var ViewB: AddHospitalDelegate? 67 var companyInfo:CompanyInfo = CompanyInfo(name: "A会社", address: "B県C市", tel: "0XX-XXX-XXXX") 68 69 func viewWillDisappear() { 70 // 下記ダメでした 71 let viewAPresenter = ViewAPresenter() 72 viewAPresenter.Addressbook.companyInfo = companyInfo 73 // 下記もダメでした 74 let viewA = self.storyboard?.instantiateViewController(withIdentifier: "viewA") as! ViewAViewController 75 viewA.addressbook.companyInfo = companyInfo 76 } 77} 78 79// ViewBDelegate 80protocol ViewBDelegate : class { 81}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/21 06:42 編集