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

Posted

技术标签:

【中文标题】(Swift) 需要帮助在视图控制器之间滑动【英文标题】:(Swift) need help swiping between view controllers 【发布时间】:2016-07-12 06:28:18 【问题描述】:

这些是我的视图控制器:

我想做到这一点,这样我就可以从中间的一个开始在他们三个之间滑动。我发现的所有教程都要求您从头开始,而不是向我展示如何连接我拥有的三个。有没有人有一步一步的说明如何做到这一点?

任何帮助将不胜感激

【问题讨论】:

【参考方案1】:

首先创建一个名为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 中您有三个 viewController,您应该从身份检查器为它们设置标识符,例如 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() in setViewControllers 开始。如果您想从视图控制器 3 开始,请使用选定的索引 2 并调用 getStepTwo()...等

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

【讨论】:

我收到一个错误:“'Use of undeclared type ViewController'”对此有什么解决方案吗? @evanhaus ViewController 是您的班级名称。在我的示例中它被称为 ViewController ,也许在您的示例中它被称为其他东西! 好吧,酷!还有一个问题,“MyViewController 没有成员“pageIndex” @evanhaus 您可以在 MyViewController var pageIndex 中添加:Int?应该使错误消失。 @Aaoli 在有人登录后我尝试加载以下内容:let mainStoryBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) let homeViewController: UIViewController = mainStoryBoard.instantiateViewControllerWithIdentifier("PageViewController") self.presentViewController(homeViewController, animated: true, completion: nil)【参考方案2】:

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

此外,如果您想滑动,您可以使用滚动视图,并且只能在视图控制器上使用。具有 3 个视图控制器的内容大小的滚动视图可以帮助您做同样的事情。 谢谢你

【讨论】:

【参考方案3】:

如下图所示

如下图所示给出故事板标识符

点击按钮推送新的视图控制器

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

【讨论】:

以上是关于(Swift) 需要帮助在视图控制器之间滑动的主要内容,如果未能解决你的问题,请参考以下文章

在 Xcode 6 和 Swift 中的视图之间进行类似 Snapchat 的滑动导航)

在 Swift 中创建滑动转场

Swift - 在 UIPageViewController 中的 3 个不同视图控制器之间导航按钮

使用我的视图控制器 swift 4 中的按钮使用 UIPageViewController 更改页面

Swift View Controller 滑动两次问题

iOS Swift - 在呈现新的视图控制器时呈现视图控制器向下滑动