Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中的视图控制器之间滑动_Ios_Swift_Uiviewcontroller_Uipageviewcontroller - Fatal编程技术网

Ios 在swift中的视图控制器之间滑动

Ios 在swift中的视图控制器之间滑动,ios,swift,uiviewcontroller,uipageviewcontroller,Ios,Swift,Uiviewcontroller,Uipageviewcontroller,在Swift中,我当前在我的第一个视图控制器中有以下代码,但当我滑动时,什么都没有发生?我的代码有什么问题?我是否必须实施其他措施?非常感谢用户,非常感谢 import UIKit class ViewController: UIViewController, UIPageViewControllerDataSource { override func viewDidLoad() { super.viewDidLoad() // Do any add

在Swift中,我当前在我的第一个视图控制器中有以下代码,但当我滑动时,什么都没有发生?我的代码有什么问题?我是否必须实施其他措施?非常感谢用户,非常感谢

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

}
导入UIKit
类ViewController:UIViewController、UIPageViewControllerDataSource{
重写func viewDidLoad(){
super.viewDidLoad()
//加载视图后,通常从nib执行任何其他设置。
}
重写函数didReceiveMemoryWarning(){
超级。我收到了记忆警告()
//处置所有可以重新创建的资源。
}
var myViewControllers=Array(计数:4,repeatedValue:UIViewController())
重写func prepareforsgue(segue:UIStoryboardSegue,sender:AnyObject!){
将pvc=segue.destinationViewController设为UIPageViewController
pvc.dataSource=self
让故事板=UIStoryboard(名称:“Main”,捆绑包:nil);
var vc0=情节提要。实例化作为UIViewController的EviewController标识符(“FirstViewController”)
var vc1=情节提要。实例化eviewcontrollerwhiteIdentifier(“SecondViewController”)作为UIViewController
var vc2=情节提要。实例化作为UIViewController的EViewController标识符(“第三个ViewController”)
var vc3=情节提要。实例化eviewcontrollerwhiteIdentifier(“第四视图控制器”)作为UIViewController
self.myViewController=[vc0、vc1、vc2、vc3]
pvc.setViewController([MyViewController[1]],方向:。正向,动画:false,完成:nil)
println(“已加载”)
}
func pageViewController(pageViewController:UIPageViewController,viewControllerAfterViewController:UIViewController)->UIViewController{
var currentIndex=find(self.myViewControllers,viewController)!+1
如果currentIndex>=self.MyViewController.count{
归零
}
返回self.MyViewController[currentIndex]
}
func pageViewController(pageViewController:UIPageViewController,viewController预览控制器viewController:UIViewController)->UIViewController{
var currentIndex=find(self.myViewControllers,viewController)!-1
如果当前索引<0{
归零
}
返回self.MyViewController[currentIndex]
}
}

对不起,您的代码对我来说非常适合。我做了一个简单的测试(以前从未使用过UIPageViewController),用一个按钮从初始VC切换到页面VC,在故事板中有两个断开连接的VC,用你的代码以编程方式构建(我直接从上面粘贴了它),然后交给页面VC。3个可见页面中的每一个都用标签标识。它们都很好用

您的UIPageViewController是否得到实例化?上面的两个代理例程是否被调用

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

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

class ViewController: UIViewController, UIPageViewControllerDataSource {

UIPageViewControllerDataSource
位只是说它还提供了告诉
UIPageViewController
显示什么的例程。当您从
ViewController
执行一个segue时,
prepareForSegue
代码将运行,并将segue的目标(预期为
UIPageViewController
)与其他4个VCs一起编程。为了让这个过程正常工作,我将
ui按钮
拖到故事板中的第一个
ViewController
,然后将
ui页面ViewController
拖到右边。然后控制从按钮到UIPageViewController的拖动。你应该得到一个弹出窗口,询问你想要什么样的序列。我选择了模态。当你运行应用程序时,你应该看到按钮。当您按下按钮时,您应该会看到VC1,向左或向右滑动将显示其他按钮。

当您从左向右滑动时,它是否可以跨VC工作?我所做的就是在我的第一个VC中粘贴代码,尽管我还需要做更多的工作。我有一个UIPageViewController,但它是否必须以某种方式进行标识和链接?我所做的只是粘贴代码,并期望它从左向右滑动。另外,我不想用按钮/标签来切换,只想滑动。哦,天哪,它工作了!谢谢,但是,当涉及到我的表视图时,用户必须在该行上滑动选项,当我滑动它时,VC不会更改tableview行选项。我可以覆盖它吗?另外,像Snapchat这样的应用程序是如何使整个分页效果不显示的,但是当你滑动时它会改变VC,所以它更干净,或者这是一件完全不同的事情?我能实现页面控件吗?如果是的话,我该怎么做?恭喜!如果你想问更多的问题,我想你应该问新问题。