UIPageViewControllerDataSource не вызывается - PullRequest
0 голосов
/ 24 сентября 2019

UIPageViewControllerDataSource не вызывается из ViewDidLoad, поэтому отображается только первая страница, и смахивание ничего не делает.

Я следовал этому руководству:

https://spin.atomicobject.com/2015/12/23/swift-uipageviewcontroller-tutorial/

Ответы на подобные вопросы не работают.Я просмотрел 5 похожих вопросов, но ни один из них не работает для меня.


class SetupViewController: UIPageViewController {

      private(set) lazy var pages : [UIViewController] = {
         return [self.newPage(1), self.newPage(2), self.newPage(3), self.newPage(4)]
      }()

      private func newPage(_ page: Int) -> UIViewController {
          return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "Page\(page)")
      }

      override func viewDidLoad() {
            super.viewDidLoad()  

            dataSource = self

            if let firstPage = pages.first {
                print(#function, "if let firstPage", firstPage, pages)  //viewDidLoad() if let firstPage page1name [page1, page2, page3, page4]
                setViewControllers([firstPage], direction: .forward, animated: true, completion: nil)

          }
     }
}

extension SetupViewController: UIPageViewControllerDataSource {

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        print(#function)           //It doesn't print
        guard let pageIndex = pages.firstIndex(of: viewController) else { return nil }
        let nextIndex = pageIndex + 1
        let pageCount = pages.count
        guard nextIndex != pageCount else { return nil }
        guard pageCount > nextIndex else { return nil }
        return pages[nextIndex]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        print(#function)            //It doesn't print
        guard let pageIndex = pages.firstIndex(of: viewController) else { return nil }
        let previousIndex = pageIndex - 1
        guard previousIndex >= 0 else { return nil }
        guard pages.count > previousIndex else { return nil }
        return pages[previousIndex]
    }

}

Идентификаторы раскадровки: Page1, Page2, Page3 & Page4

Что я делаюнеправильно?

1 Ответ

1 голос
/ 24 сентября 2019

Может быть, у вас проблема с настройкой. Я создал демо здесь

https://github.com/ShKhan9/PagerShow


let wind = (UIApplication.shared.delegate as! AppDelegate).window!
wind.rootViewController = SetupViewController()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...