如何检测 UIPageViewController 视图何时更改

Posted

技术标签:

【中文标题】如何检测 UIPageViewController 视图何时更改【英文标题】:How to detect when a UIPageViewController's view has changed 【发布时间】:2018-03-06 01:09:15 【问题描述】:

我有一个带有 PageViewController 的应用程序,我想制作自己的自定义 PageViewController 指示器。一切都已准备就绪。我现在唯一需要做的就是弄清楚如何判断视图控制器的视图何时更改以及它当前处于哪个视图。

我已链接到this demo。在第一部分中,我单击顶部的按钮以更改页面和指示当前页面正在工作的滑块,但是之后我滑动手指以更改控制器,并且我想让滑块指示器移动与页面。

【问题讨论】:

【参考方案1】:

这里我已经评论了如何使用 PageViewController 获取当前页面索引

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
    
        if (completed)
        
            //No need as we had Already managed This action in other Delegate
        
        else
        
            ///Update Current Index
            Manager.pageindex = Manager.lastIndex

            ///Post notification to hide the draggable Menu
            NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateLabelValue"), object: nil)
        
    

    //MARK: Check Transition State
    func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
    
        ///Update Last Index
        Manager.lastIndex = Manager.pageindex

        ///Update Index
        Manager.pageindex = pages.index(of: pendingViewControllers[0])!

        ///Post notification to hide the draggable Menu
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateLabelValue"), object: nil)
    

我曾使用 Notification Observer 通知主控制器页面更改并执行一些操作

Manager 是我的结构体,它保存当前页码,你可以在任何你想要的地方保存结构体或类中的索引

我的结构类

//Struct Class
struct Manager

    ///Current Page Index
    static var pageindex :Int = 0

    ///Last Index
    static var lastIndex :Int = 0

主要用途

switch Manager.pageindex
        
        case 0:
            self.mainHomeLabel.text = "VC1"
        case 1:
            self.mainHomeLabel.text = "VC2"
        case 2:
            self.mainHomeLabel.text = "VC3"
        default:
            self.mainHomeLabel.text = "VC1"
        

注意相关代码中的任何查询请询问

更新 - 添加了演示项目链接

链接 - https://github.com/RockinGarg/PageViewController-Demo.git

【讨论】:

非常感谢您的回答,非常感谢。我想我明白你的想法了,请你帮我实现一下,我把这段代码放在哪些类中? 好的,我将与您分享示例项目 我分享了一个创建的演示项目,请检查它是否会为您提供所需的所有步骤 非常感谢,我做了你所说的一切,这很简单,但是我的 _______ func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) _____ 甚至从来没有被调用过,我有代表 请让我检查一下【参考方案2】:

如果您有要显示的页面数组,那么您可以使用 UIPageViewControllerDelegate 来检测页面更改。更具体地说,这个函数https://developer.apple.com/documentation/uikit/uipageviewcontrollerdelegate/1614091-pageviewcontroller 因为它会告诉你你将要过渡到什么。然后,您可以根据即将呈现的视图控制器确定您所在的页面。

【讨论】:

以上是关于如何检测 UIPageViewController 视图何时更改的主要内容,如果未能解决你的问题,请参考以下文章

在 Monotouch 中的 UIPageViewController 中检测控件上的触摸事件

如何从属于 UIPageViewController 的 UIViewController 之一更改 UIPageViewController?

如何删除 UIPageViewController 中的 previousViewControllers

如何更改 UIPageViewController 中的按钮名称

如何快速阻止 UIPageViewController 的滑动手势?

如何让 UIPageViewController 自动切换控制器