簡體   English   中英

頁面視圖控制器中的導航控制器

[英]Nav controllers within page view controller

我試圖將一系列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?'

我要完成的工作可以完成嗎? 如果是這樣,我是否需要在某個地方更改代碼或以完全不同的方式實現此目的?

您定義的協議位於ViewController但應在UIPageViewController類中定義。

class PageViewController: UIPageViewController, UIPageViewControllerDataSource {
}

為此,您需要創建一個新類,該新類應與您在情節提要上采取的Page View Controller相關聯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM