如何在水平UIPageViewController内实现垂直UIPageViewController

5

enter image description here

我想要调整我的 UIPageViewController,使其按照上图的方式工作。当前的情况是 1b 可以前往 2a 等等。我需要做什么来锁定方向,使其按照上图的方式工作?我是否遗漏了什么或者使用了错误的逻辑?任何提示都将非常有帮助!

注意:垂直 UIPageViewController 在水平 UIPageViewController 中。

水平 UIPageViewController 代码

class MyPageViewController: UIPageViewController , UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pages = [UIViewController]()

override func viewDidLoad() {
    super.viewDidLoad()

    self.delegate = self
    self.dataSource = self

    let page1: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page1")
    let page2: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page2")
    let page3: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("page3")


    pages.append(page1)
    pages.append(page2)
    pages.append(page3)


    setViewControllers([page2], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)
}

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


    let currentIndex = pages.indexOf(viewController)!


    let previousIndex = abs((currentIndex - 1) % pages.count)


    if (previousIndex > 0)
    {
        return nil
    }



    return pages[previousIndex]
}

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
    let currentIndex = pages.indexOf(viewController)!
    let nextIndex = abs((currentIndex + 1) % pages.count)


    if (nextIndex < 1)

    {
        return nil
    }

    return pages[nextIndex]

}

垂直UIPageViewController代码

class upAndDownViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

var pages = [UIViewController]()

override func viewDidLoad() {
    super.viewDidLoad()

    self.delegate = self
    self.dataSource = self

    let midPage: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("midPage")
    let topPage: UIViewController! = storyboard?.instantiateViewControllerWithIdentifier("topPage")



    pages.append(midPage)
    pages.append(topPage)



    setViewControllers([midPage], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil)




}

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


    let currentIndex = pages.indexOf(viewController)!
    let nextIndex = abs((currentIndex + 1) % pages.count)


    if (nextIndex < 1)
    {
        return nil
    }

    return pages[nextIndex]
}

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

    let currentIndex = pages.indexOf(viewController)!


    let previousIndex = abs((currentIndex - 1) % pages.count)


    if (previousIndex > 0)
    {
        return nil
    }



    return pages[previousIndex]


}
1个回答

1
我将水平的UIPageViewController放在垂直的UIPageViewController中。这样修复了问题,但由于某些原因,在顶部垂直的UIPageViewController中打开的其他视图控制器可以向下翻页,我将进一步研究并可能修复它。

你有解决这个问题吗?我其实正试图做类似的事情。如果可以问一下,你的故事板长什么样子?(此外,我意识到这是很久以前的事情了,你可能甚至都记不清你当时在这里工作的内容了...) - skind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接