繁体   English   中英

快速在视图控制器之间滑动

[英]Swiping between View Controllers in swift

在Swift中,当前我的第一个视图控制器中包含以下代码,但是当我滑动时什么都没有发生? 我的代码有什么问题? 我还需要实施其他东西吗? 非常感谢SO用户,非常感谢。

import UIKit


class ViewController: UIViewController, UIPageViewControllerDataSource {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


    }

     override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.

    }

    var myViewControllers = Array(count: 4, repeatedValue:UIViewController())

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
        let pvc = segue.destinationViewController as UIPageViewController

        pvc.dataSource = self

        let storyboard = UIStoryboard(name: "Main", bundle: nil);

        var vc0 = storyboard.instantiateViewControllerWithIdentifier("FirstViewController") as UIViewController
        var vc1 = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as UIViewController
        var vc2 = storyboard.instantiateViewControllerWithIdentifier("ThirdViewController") as UIViewController
        var vc3 = storyboard.instantiateViewControllerWithIdentifier("FourthViewController") as UIViewController

        self.myViewControllers = [vc0, vc1, vc2, vc3]

        pvc.setViewControllers([myViewControllers[1]], direction:.Forward, animated:false, completion:nil)

        println("Loaded")
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
        var currentIndex =  find(self.myViewControllers, viewController)!+1
        if currentIndex >= self.myViewControllers.count {
            return nil
        }
        return self.myViewControllers[currentIndex]
    }

    func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
        var currentIndex =  find(self.myViewControllers, viewController)!-1
        if currentIndex < 0 {
            return nil
        }
        return self.myViewControllers[currentIndex]
    }

}

抱歉,您的代码对我来说是完美的。 我做了一个简单的测试(以前从未使用过UIPageViewController),并使用一个按钮将其从初始VC筛选到Page VC,并将故事板上的两个断开连接的VC用您的代码以编程方式构造(我直接从上面粘贴了它),提供给Page VC。 3个可见页面的每一个都用标签标识。 他们都工作正常。

您的UIPageViewController是否实例化? 上面的两个委托例程会被调用吗?

我怀疑您没有正确设置情节提要。 这是我的:

故事板屏幕抓图

当iOS运行您的应用程序时,它将控制权转移到初始VC。 这就是您在其中编写代码的代码,在上述源代码中称为ViewController 那不是UIPageViewController ; 这是一个普通的UIViewController ,它在这里说:

class ViewController: UIViewController, UIPageViewControllerDataSource {

UIPageViewControllerDataSource位只是说它还提供了告诉UIPageViewController要显示什么的例程。 当您从ViewController执行segue时,将运行prepareForSegue代码,并使用其他4个VC对segue的目的地(应该是UIPageViewController进行UIPageViewController 为了使segue正常工作,我将UIButton拖到情节UIPageViewController的第一个ViewController上,并将UIPageViewController拖到右侧。 然后,将控件从按钮拖动到UIPageViewController。 您应该弹出一个窗口,询问您想要哪种类型的segue。 我选择了模态。 运行该应用程序时,您应该看到该按钮。 按下按钮时,您应该看到VC1,向左或向右滑动将显示其他按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM