実現したいこと
PageViewController使用時、Page遷移するたびにViewを更新したいです。
発生している問題
PageViewControllerを使いスワイプでページがめくれるよう実装しております。
3ページで構成されており、左から
- CalendarViewController
- TodayViewController
- RecordViewController
となっております。ページ2でデータの変更&保存ができます。3ページ目はその保存されたデータを表示するようにしております。
初期表示が2ページ目になっており、2ページ目から初めて3ページ目に行くときは2ページ目で変更や保存したデータが適切に表示されます。ですがその後ページ2に戻ってから、データを更新してページ3にいくとその結果が反映されず、先ほど表示されたデータがそのまま表示されてしまいます。
どのようにすれば2ページ目から3ページ目に行くたびに更新されたデータを表示できますでしょうか?
該当のソースコード
import UIKit class PageViewController: UIPageViewController { override func viewDidLoad() { super.viewDidLoad() self.setViewControllers([getTodayPage()], direction: .forward, animated: true, completion: nil) self.dataSource = self // let todayViewController = TodayViewController() // pageViewController(self, didFinishAnimating: true, previousViewControllers: [todayViewController], transitionCompleted: true) } func getTodayPage() -> TodayViewController { let todayView = storyboard!.instantiateViewController(withIdentifier: "todayViewIdentifier") as! TodayViewController todayView.selectedDate = selectedDate return todayView } func getCalendarPage() -> CalendarViewController { return storyboard!.instantiateViewController(withIdentifier: "calendarView") as! CalendarViewController } func getRecordPage() -> RecordViewController { return storyboard!.instantiateViewController(withIdentifier: "recordView") as! RecordViewController } } extension PageViewController : UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { if viewController.isKind(of: RecordViewController.self) { return getTodayPage() } else if viewController.isKind(of: TodayViewController.self) { return getCalendarPage() }else{ return nil } } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { if viewController.isKind(of: CalendarViewController.self) { return getTodayPage() } else if viewController.isKind(of: TodayViewController.self) { return getRecordPage() }else{ return nil } } } //extension PageViewController: UIPageViewControllerDelegate { // // func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) { // // //Ver 1 // let recordViewController = RecordViewController() // recordViewController.viewDidLoad() // // //Ver 2 // pageViewController.dataSource = nil // pageViewController.dataSource = self // // } //}
試したこと
上のソースコードでコメントアウトしているUIPageViewControllerDelegateを使った方法でVer1, Ver2とそれぞれ試してみましたがどちらも結果は変わりませんでした。
他にもviewWillAppearとviewDidDisappearをoverrideするなど様々な方法を試してみましたが思うような結果が得られませんでした。
皆様のお力添えいただけますと幸いです。
何卒よろしくお願いいたします。
補足情報(言語/FW/ツール等のバージョンなど)
Swift 5.0.1
Xcode 10.2.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/21 09:43 編集
2019/07/21 11:32
2019/07/21 14:22
2019/07/21 14:42
2019/07/22 10:55
2019/07/22 12:05
2019/07/22 13:40
2019/07/23 05:22
2019/07/23 12:14
2019/07/24 07:32