UIPageViewController -presentationCount 不触发

Posted

技术标签:

【中文标题】UIPageViewController -presentationCount 不触发【英文标题】:UIPageViewController -presentationCount not firing 【发布时间】:2018-05-25 18:05:38 【问题描述】:

问题:UIPageViewController 页面之间的导航工作正常,但是:1) 导航点视图未显示 2) 一些 dataSource 方法没有被调用(可能是 1.)

我有以下 UI 设置(基本上是 UIPageViewController in UITableViewCell

UITableViewCell

问题:

调用正常:

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

【问题讨论】:

【参考方案1】:

如果实现了这两种方法,页面指示器将可见,过渡样式为“UIPageViewControllerTransitionStyleScroll”,导航方向为“UIPageViewControllerNavigationOrientationHorizo​​ntal”。

这两种方法都是为了响应“setViewControllers:...”调用而调用的,但在手势驱动导航的情况下,显示索引会自动更新。

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

用于页面指示器的可见性。在 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
    
 

【讨论】:

我不知道你在说什么。你也没有引用'presentationCount'委托方法,这是我遇到的问题......而且看起来你只是随机粘贴了一些代码:) 我认为您在显示页面指示器时遇到了问题。 @PawelKlapuch + 用于配置 UIPageController 的页面控件颜色的绝妙方法。 :thumbup: :谢谢: orderedViewControllers 未定义。 用你的 UIViewcontroller 的数组 @Oscar 替换【参考方案2】:

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

其实Vishal是这么说的,但不是很清楚:)

【讨论】:

以上是关于UIPageViewController -presentationCount 不触发的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController - 不符合协议

UIPageViewController 方向只向前

UIPageViewController 和 UIScrollView

NavigationController 中的 UIPageViewController

如何删除 UIPageViewController 中的 previousViewControllers

UIPageViewController -presentationCount 不触发