UIPageViewController -presentationCount未触发

时间:2017-12-12 05:52:11

标签: ios uitableview datasource uipageviewcontroller uipagecontrol

问题:页面之间的UIPageViewController导航工作正常但是:
1)导航点视图未显示 2)未调用某些dataSource方法(可能导致1。)

我有以下用户界面设置(基本上UIPageViewController中的UITableViewCell

  

UITableViewCell< - UIViewController< - ContainerView< - UIPageViewController

问题:

CALLED OK:

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?

未收到:

func presentationCount(for pageViewController: UIPageViewController) -> Int
func presentationIndex(for pageViewController: UIPageViewController) -> Int 

viewDidLoad 之后完成所有设置:

dataSource = self
setViewControllers([viewController], direction: .reverse, animated: false, completion: nil)

注意:我正在内容视图中直接在应用中的其他位置使用其他UIPageViewController - >所有委托方法都运行正常。另一个(可能是直接相关的)问题是导航点视图不可见。 (在未嵌入的情况下再次正常工作)。

有人经历过这样的事吗? 为什么会调用某些dataSource委托方法而其他方法不会调用?

我一直在看这个代码,我可以在谷歌找到几个小时,但无法前进。

UIPageViewController Implementation

2 个答案:

答案 0 :(得分:3)

如果两种方法都已实现,则转换样式为' UIPageViewControllerTransitionStyleScroll'以及导航方向为' UIPageViewControllerNavigationOrientationHorizo​​ntal'

响应一个' setViewControllers调用这两个方法:...'呼叫,但在手势驱动导航的情况下,演示文稿索引会自动更新。

表示pageindicator的可见性。以下代码添加在viewdidload中

var pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGray
pageControl.currentPageIndicatorTintColor = UIColor.white
pageControl.backgroundColor = UIColor.black

func presentationCount(for pageViewController: UIPageViewController) -> Int {
    return orderedViewControllers.count
}

func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    if let currentVC = self.viewControllers!.first {
        let currentIndex = orderedViewControllers.index(of: currentVC)
        return currentIndex!
    }else{
        return 0
    }
 }

答案 1 :(得分:2)

根据Apple文档,您需要实现两种方法,确保控制器的过渡样式为"滚动"。然后页面指示器将可见并调用函数。请检查一下。

实际上Vishal说过这个,但不是很清楚:)