【问题标题】:Swiping between View Controllers in swift快速在视图控制器之间滑动
【发布时间】:2015-04-03 10:27:55
【问题描述】:

在 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]
    }

}

【问题讨论】:

    标签: ios swift uiviewcontroller uipageviewcontroller


    【解决方案1】:

    抱歉,您的代码非常适合我。我做了一个简单的测试(以前从未使用过 UIPageViewController),用一个按钮从初始 VC 切换到 Page VC,故事板中的两个断开连接的 VC 用你的代码以编程方式构建(我直接从上面粘贴)和给 Page VC。 3 个可见页面中的每一个都用标签标识。而且它们都工作正常。

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

    我怀疑您没有正确设置故事板。这是我的:

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

    class ViewController: UIViewController, UIPageViewControllerDataSource {
    

    UIPageViewControllerDataSource 位只是说它还提供了告诉UIPageViewController 显示什么的例程。当您从ViewController 进行转场时,prepareForSegue 代码将运行,并与其他 4 个 VC 一起编程转场的目的地,预计为UIPageViewController。为了使segue 工作,我将UIButton 拖到故事板中的第一个ViewController,并将UIPageViewController 拖到右侧。然后从按钮控制拖动到 UIPageViewController。你应该得到一个弹出窗口,询问你想要什么样的 segue。我选择了模态。运行应用程序时,您应该会看到该按钮。当你按下按钮时,你应该看到VC1,向左或向右滑动会显示其他的。

    【讨论】:

    • 当您从左向右滑动时,它是否适用于 VC?我所做的只是将代码粘贴到我的第一个 VC 中,尽管我还需要做更多的事情。我有一个 UIPageViewController,但它是否特别需要以某种方式识别和链接?我所做的只是粘贴代码并期望它从左向右滑动。另外,我不想使用按钮/标签来继续,只是滑动。
    • 哦,我的工作!谢谢,虽然,当涉及到我的表格视图时,用户必须在该行上滑动选项,当我滑动它时,VC 不会更改 tableview 行选项。我可以覆盖这个吗?
    • 另外,像 Snapchat 这样的应用程序是如何做到的,所以整个分页效果不会显示,但是当你滑动时它会改变 VC,所以它更干净,还是完全不同的东西?我可以实现页面控件吗?如果是这样,我该怎么做?
    • 恭喜!如果您想了解更多,我认为您应该提出新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    相关资源
    最近更新 更多