2016-11-08 61 views
2

我现在有一个UIPageController其正确地检测在滚动UIPageController - 检测当前页面如果刷卡取消(SWIFT 3 *)

上一个或下一个的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似乎不会被每一次调用,因此我不能依赖这个委托方法

回答

1

我不知道我怎么错过了这一点,但在didFinishAnimating方法是自己完成块

因此下面的代码固定我的问题

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

    if completed 
    { 
     currentIndex = nextIndex 

    } 

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