Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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 页面视图控制器中的导航控制器_Ios_Swift_Uinavigationcontroller_Navigation_Uipageviewcontroller - Fatal编程技术网

Ios 页面视图控制器中的导航控制器

Ios 页面视图控制器中的导航控制器,ios,swift,uinavigationcontroller,navigation,uipageviewcontroller,Ios,Swift,Uinavigationcontroller,Navigation,Uipageviewcontroller,我试图将一系列UINavigationControllers添加到单个UIPageViewController中,就像在页面之间添加滑动导航一样。我在使用标准视图控制器时取得了一些成功,但我现在尝试添加导航控制器。这是我的故事板: 我想做的是在第三行的所有页面之间实例化滑动导航(如Snapchat)。由于它们都指向其他视图控制器,因此每个视图控制器都嵌入到自己的导航控制器中。这是我的密码: class ViewController: UIViewController, UIPageViewCo

我试图将一系列
UINavigationControllers
添加到单个
UIPageViewController
中,就像在页面之间添加滑动导航一样。我在使用标准视图控制器时取得了一些成功,但我现在尝试添加导航控制器。这是我的故事板:

我想做的是在第三行的所有页面之间实例化滑动导航(如Snapchat)。由于它们都指向其他视图控制器,因此每个视图控制器都嵌入到自己的导航控制器中。这是我的密码:

class ViewController: UIViewController, UIPageViewControllerDataSource { // <-- Error here

// Sets up UIPageViewController. Must add to array count and instantiate new VCs.
    var myNavControllers = Array(count: 3, repeatedValue:UINavigationController())

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

        let pvc = segue.destinationViewController as! UIPageViewController

        pvc.dataSource = self // <-- Error here

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

        var vc0 = storyboard.instantiateViewControllerWithIdentifier("Nav1") as! UINavigationController
        var vc1 = storyboard.instantiateViewControllerWithIdentifier("Nav2") as! UINavigationController
        var vc2 = storyboard.instantiateViewControllerWithIdentifier("Nav3") as! UINavigationController
        var vc3 = storyboard.instantiateViewControllerWithIdentifier("Nav4") as! UINavigationController


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

        pvc.setViewControllers([myNavControllers[1]], direction:.Forward, animated:true, completion:nil)

    }

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

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

}
class ViewController:UIViewController,UIPageViewControllerDataSource{/=self.myNavControllers.count{
归零
}
返回self.myNavController[currentIndex]
}
func pageViewController(pageViewController:UIPageViewController,viewController预览控制器viewController:UINavigationController)->UINavigationController?{
var currentIndex=find(self.myNavControllers,viewController)!-1
如果当前索引<0{
归零
}
返回self.myNavController[currentIndex]
}
}
问题是,我有两个错误。
类中的一个:ViewController
声明:
类型“ViewController”不符合协议“UIPageViewControllerDataSource”
。另一个位于
pvc.dataSource=self
,错误为:
无法将“ViewController”类型的值分配给“UIPageViewControllerDataSource”类型的值。


我想做的事能完成吗?如果是这样,我是否需要在某个地方修改代码或以完全不同的方式实现此目的?

您定义的协议位于
ViewController
中,但该协议应在
UIPageViewController
类中定义

class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
}
为此,您需要创建一个新类,该类应与您在故事板上使用的页面视图控制器相关联。

由于以下回答,您获得了它: