Как использовать PageViewController с начальными страницами? - PullRequest
0 голосов
/ 12 мая 2019

Я хочу создать приложение, такое как Календарь по умолчанию для iOS.У меня есть две стороны экрана.Верхняя сторона - containerView с pageviewcontroller, где пользователь может выбрать день недели.Внизу containerView с pageviewcontroller, где таблица с вещами на каждый день.

В topContainerView я создал функцию pageViewController, которая создает контроллер представления с 7 днями и кнопками длякаждый день.Я хочу, когда кто-то нажмет.день для смены контроллера вида после и до с pageViewController.Я сделал делегат протокола для каждого контроллера недели, и при нажатии на день контроллер страницы недели изменит день, но контроллер представления после и до не изменится.

  class WeekPageController: UIPageViewController {


        // MARK: - IBOutlets & vars -
        var currentDate = Date()
        var presentedController: WeekController!
        weak var calendarDelegate: CalendarDelegate?

        // MARK: - IBActions & fat -
        private func getPage(data: Date) -> WeekController? {
            guard let page = storyboard?.instantiateViewController(withIdentifier: CConstants.CONTROLLER.WEEK) as? WeekController else { return nil }
            page.currentDate = data
            page.delegate = self
            return page
        }


        // MARK: - Lifecycle -
        override func viewDidLoad() {
            super.viewDidLoad()
            automaticallyAdjustsScrollViewInsets = true
            dataSource = self
            delegate = self
            presentedController = getPage(data: currentDate)
            presentedController?.afisare(data: currentDate)
            setViewControllers([presentedController!], direction: .forward, animated: true, completion: nil)

        }
    }
    extension WeekPageController: PageViewControllerDelegate {
        func ziSaptamana(_ ziSaptamana : Int)
        {

            var weekDay = Calendar.current.component(.weekday, from: currentDate)
            if weekDay == 1 { weekDay = 7 } else {  weekDay -= 1}

            if weekDay != 7 {
                currentDate = Calendar.current.date(byAdding: .day, value: (ziSaptamana - weekDay), to: currentDate)!
            } else {
                currentDate = Calendar.current.date(byAdding: .day, value:  ziSaptamana - 7, to: currentDate)!
            }
            self.presentedController?.afisare(data: currentDate)
        }
        extension WeekPageController: UIPageViewControllerDataSource {
            func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
                let day = (viewController as! WeekController).currentDate
                guard var dayBefore = Calendar.current.date(byAdding: .day, value: -7, to: day) else { return nil }
                return getPage(data: dayBefore)
            }

            func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
                let day = (viewController as! WeekController).currentDate
                guard var dayAfter = Calendar.current.date(byAdding: .day, value: +7, to: day) else { return nil }
                return getPage(data: dayAfter)
            }


        }
        extension WeekPageController: UIPageViewControllerDelegate {
            func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
                self.presentedController = pendingViewControllers.first as! WeekController
                self.presentedController.afisare(data: presentedController.currentDate)

            }
            func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
                self.currentDate = (self.viewControllers?.first as! WeekController).currentDate
            }




            protocol PageViewControllerDelegate : class {
                func ziSaptamana(_: Int)
            }
            class WeekController: UIViewController {
                var index: Int = 0
                var currentDate = Date()
                weak var delegate: PageViewControllerDelegate?

                private func delegates(id: Int){
                    delegate?.ziSaptamana(id)
                }

                @IBAction func luni(_ sender: UIButton) {
                    delegates(id: 1)
                }
                }
                func afisare(data: Date) {

                }



    }
...