UIPageViewController调用viewControllerBeforeViewController和viewControllerAfterViewController

时间:2014-07-05 04:54:42

标签: ios

我在stackoverflow上看到了类似的问题(例如,herehere)但没有一个有明确的答案。我跟着this tutorial但是为我想要显示的每个页面创建了一个单独的UIViewController文件和它自己的.xib文件。在第一次滑动时,viewControllerBeforeViewControllerviewControllerAfterViewController都会被调用。本教程使用这两种方法来递增或递减pageIndex。所以我最终看到的是pageIndex初始化为0,然后在调用viewControllerAfterViewController时设置为1,然后在调用viewControllerBeforeViewController时立即设置为0。最终,这会导致页面显示不正确。

2 个答案:

答案 0 :(得分:2)

这是我解决这个问题的方式。

在每个页面视图控制器中,我创建了一个名为readonly的{​​{1}}属性,我在其实现中将其指定为相关值(例如,1,2或3)。 然后我这样做了:

index

答案 1 :(得分:0)

我认为它可以像下面那样简化。 if / else不需要这么多。关键是要理解我们只有在新索引有效时才需要计算新索引,即它是否介于0和页数之间:

func pageViewController(_ pageViewController: UIPageViewController,
                    viewControllerBefore viewController: UIViewController) -> UIViewController? {
    let pageContent: HomeCardVC = viewController as! HomeCardVC

    if var index = pageContent.pageIndex {
        if (index == 0 || index == NSNotFound) {
            return nil;
        }
        index = index - 1;

       return getViewControllerAtIndex(index: index)
    }
    return nil
}

func pageViewController(_ pageViewController: UIPageViewController,
                    viewControllerAfter viewController: UIViewController) ->   UIViewController? {
    let pageContent: HomeCardVC = viewController as! HomeCardVC

    if var index =  pageContent.pageIndex {
        if (index == NSNotFound || index == providersList.count - 1) {
            return nil
        }

        index = index + 1;
        return getViewControllerAtIndex(index: index)
    }
    return nil
}