swift - UIPageViewController 在快速向前和向后滚动时,索引未打印正确

标签 swift uipageviewcontroller

这里我用 Swift 编写了 UIPageViewController。这是工作。但是,当我向前或向后滑动/滚动页面时,索引无法正确打印。所需页面已正确打开。但是,该页面的索引值在控制台中打印不正确。此外,有时当页面正确打开时,它不会在滚动时打印索引。请帮助我如何在滚动时获得页面的正确索引。代码如下......

var pageViewController: UIPageViewController!
let pages = ["TabOneVc","TwoVC","ThreeVc","FourVc"]

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? 
{
    if let index = pages.indexOf(viewController.restorationIdentifier!){
        if index > 0{
               print(index)
               return viewcontrollerAtIndex(index - 1)
         }
      }

    return nil
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? 
{
  if let index = pages.indexOf(viewController.restorationIdentifier!){

        if index < pages.count - 1{
                print(index)
                      return viewcontrollerAtIndex(index + 1)
            }
    }
    return nil
}

func viewcontrollerAtIndex(index: Int) -> UIViewController?
{
    let vc = storyboard?.instantiateViewControllerWithIdentifier(pages[index])
    print("index path",index)
    return vc
}

最佳答案

(当您滑动并落在 View Controller 上时,它还会加载下一个 View Controller ,使其准备就绪,因此将再次调用 viewControllerAtIndex 并打印当前所在 View Controller 的下一个索引,从而导致以下问题错误的索引。)

获得当前索引的正确方法是实现这个委托(delegate)方法:

func pageViewController(pageViewController:UIPageViewController,didFinishAnimating完成:Bool,previousViewControllers:[UIViewController],transitionCompleted完成:Bool){

检查 transitionCompleted 是否为 true(当页面完全更改时),然后使用它根据当前代码获取当前索引:

let viewController = pageViewController.viewControllers![0] as! View Controller 让索引=pages.indexOf(viewController.restorationIdentifier!)

这会获取 pageViewController 数组中的第一个 View Controller ,并使用当前代码从restortationIdentifier 获取其索引。

希望这有帮助。

关于swift - UIPageViewController 在快速向前和向后滚动时,索引未打印正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36173295/

相关文章:

ios - uipageviewcontroller 中的 Swift uipageviewcontroller

swift - 如何在WKWebview中使按钮刷新页面

swift - 如何设置段控件来更改 TableView 单元格中的集合单元格项目?

ios - 在 UITableViewCell 中重新加载 Collectionview Cell

ios - UIPageViewController 与 TableView

iOS PageViewController 使用 Storyboard具有不同的页面布局

ios - 如何制作未知页码的UIPageViewController?

swift - Realm 对象服务器 : failed asserting left. optional == right.optional(在 Android 和 iOS 之间同步数据)

ios - 从详细信息页面返回表格 View ,无需重新加载表格

iOS:右滑动手势在 UIPageViewController 中没有响应