(Swift)需要帮助在视图控制器之间滑动

时间:2016-07-12 06:28:19

标签: swift xcode viewcontroller uipageviewcontroller

这些是我的视图控制器:enter image description here

我想这样做,以便我可以在中间的三个之间滑动它们。我发现的所有教程都要求你从头开始,不要告诉我如何连接我拥有的三个。有没有人有如何做到这一步的逐步说明?

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

首先创建一个名为PageViewController的类,在storyboard中拖动UIPageViewController。现在让我们从属性检查器中将其设置为初始视图控制器。同样来自身份检查员将PageViewController设置为Class。

调用您的三个视图控制器,例如StepZero,StepOne,StepTwo还在故事板中为它们提供标识符。

现在深入编码,因此在PageViewController中应该是UIPageVIewController的子类:

import UIKit

class PageViewController : UIPageViewController,UIPageViewControllerDataSource {

    var selectedIndex = 1

    override func viewDidLoad() {

        dataSource = self

        view.backgroundColor = UIColor.darkGrayColor()

        // This is the starting point.  Start with step zero.
        setViewControllers([getStepOne()], direction: .Forward, animated: false, completion: nil)
    }

    func getStepZero() -> StepZero {
        return storyboard!.instantiateViewControllerWithIdentifier("StepZero") as! StepZero
    }

    func getStepOne() -> StepOne {
        return storyboard!.instantiateViewControllerWithIdentifier("StepOne") as! StepOne
    }

    func getStepTwo() -> StepTwo {
        return storyboard!.instantiateViewControllerWithIdentifier("StepTwo") as! StepTwo
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        if viewController.isKindOfClass(StepTwo) {
            // 2 -> 1
            return getStepOne()
        } else if viewController.isKindOfClass(StepOne) {
            // 1 -> 0
            return getStepZero()
        } else {
            // 0 -> end of the road
            return nil
        }
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        if viewController.isKindOfClass(StepZero) {
            // 0 -> 1
            return getStepOne()
        } else if viewController.isKindOfClass(StepOne) {
            // 1 -> 2
            return getStepTwo()
        } else {
            // 2 -> end of the road
            return nil
        }
    }

    // Enables pagination dots
    func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
        return 3
    }

    // This only gets called once, when setViewControllers is called
    func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
        return selectedIndex
    }


}

让我们在Storyboard中说你有三个viewControllers,你应该从身份检查器为StepZero StepOne StepTwo设置它们的标识符,例如当你实例化它们时:

func getStepZero() -> StepZero {
    return storyboard!.instantiateViewControllerWithIdentifier("StepZero") as! StepZero
}

func getStepOne() -> StepOne {
    return storyboard!.instantiateViewControllerWithIdentifier("StepOne") as! StepOne
}

func getStepTwo() -> StepTwo {
    return storyboard!.instantiateViewControllerWithIdentifier("StepTwo") as! StepTwo
}

所选索引是您要开始的索引,编号为1.并且从getStepOne()中的第二个视图控制器调用setViewControllers开始。如果您想从视图控制器3开始,请使用选定的索引2并调用getStepTwo() ...等

下载更新的示例:https://mega.nz/#!EQEFhbwS!0yoy5RvAliQNnjRevWo05wPWk7P08e8DVetRZdjg-ro

答案 1 :(得分:0)

您可以通过导航控制器连接视图控制器。只需选择一个视图控制器 - >编辑(在mac的顶部栏) - >嵌入 - >导航控制器。

此外,如果要滑动,可以使用滚动视图,仅在视图控制器上使用。内容大小为3的视图控制器的滚动视图可以帮助您执行相同操作。 谢谢

答案 2 :(得分:0)

按照以下图片

enter image description here

提供故事板标识符,如下图所示

enter image description here

点击按钮,点按“推新视频控制器”

var viewControllerObj=self.storyboard!.instantiateViewControllerWithIdentifier("your storyboard identifier") 
self.navigationController!.pushViewController(viewControllerObj, animated: true)