【问题标题】:Nav controllers within page view controller页面视图控制器中的导航控制器
【发布时间】:2015-07-06 04:28:01
【问题描述】:

我正在尝试将一系列 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 声明:Type 'ViewController' does not conform to protocol 'UIPageViewControllerDataSource'。另一个在pvc.dataSource = self,有错误:Cannot assign a value of type 'ViewController' to a value of type 'UIPageViewControllerDataSource?'

我想做的事能完成吗?如果是这样,我是否需要在某处更改我的代码或以完全不同的方式实现这一点?

【问题讨论】:

标签: ios swift uinavigationcontroller navigation uipageviewcontroller


【解决方案1】:

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

class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
}

为此,您需要创建一个新类,该类应与您在情节提要上采用的页面视图控制器相关联。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2014-01-11
    • 1970-01-01
    相关资源
    最近更新 更多