swift - UIPageController - 如果滑动取消则检测当前页面 (SWIFT 3.*)

标签 swift uipageviewcontroller

我目前有一个 UIPageController,它可以在滚动时正确检测上一个或下一个 pageIndex

我需要解决的问题是......

示例:- 用户向左或向右滚动,但随后决定在滑动期间取消……因此保留在当前页面上。

pageIndex 更改为待处理页面(下一页),而不是实际的当前页面。

我的代码目前实现了上面的语句:--

func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {

    if let itemController = pendingViewControllers[0] as? PageContentViewController {

        nextIndex = itemController.pageIndex

        print("Page index = \(nextIndex)")
    }
}

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        currentIndex = nextIndex
        print("Current Page = \(currentIndex)")
    }


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



    let itemController = viewController as! PageContentViewController

    if itemController.pageIndex < numberOfPages {
        return getItemController(itemController.pageIndex+1)
    }

    return nil

}



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

    let itemController = viewController as! PageContentViewController

    if itemController.pageIndex > 0 {

        return getItemController(itemController.pageIndex-1)
    }

    return nil
}

func getItemController(_ itemIndex: Int) -> PageContentViewController? {

    if itemIndex < numberOfPages {
        let pageItemController = self.storyboard!.instantiateViewController(withIdentifier: "Page1") as! PageContentViewController
        pageItemController.pageIndex = itemIndex

        return pageItemController
    }

    return nil
}

我想在页面显示之前获取页码,以便我可以显示特定对象等。

viewControllerAfter 和 viewControllerBefore 似乎并不是每次都被调用,因此我不能依赖这个委托(delegate)方法

最佳答案

我不知道我是如何错过这个的,但在 didFinishAnimating 方法中,它们是一个完成 block

因此以下代码解决了我的问题

func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {

    if completed
    {
        currentIndex = nextIndex

    }

    print("Current Page = \(currentIndex)")
}

关于swift - UIPageController - 如果滑动取消则检测当前页面 (SWIFT 3.*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40485964/

相关文章:

swift - Swift 中的继承、泛型和协议(protocol)

swift - Swift 中 HomeVC 退出按钮的导航 rootViewController 问题

ios - 如何在通知操作中显示特定的 View Controller ?

swift - 为什么是 CFloat 和 CDouble? func addNewValue(newVal : CFloat, atTime time: CDouble) -> CFloat {}

ios - PageViewController 之前和之后调用两次并且索引不计为真

ios - Swift:UIPageViewController - 加载单独的 View

ios - Swift 2.2 - 记事本应用程序,将单独的 textView 关联到单元格而不添加 ViewController

ios - 访问iOS6 UIPageViewController创建的UIPageControl?

ios - 从其 subview Controller 之一中删除 UIPageViewController 的正确过程是什么?

ios - 滑动后调整 super View 大小时 UIPageViewController View 会跳转