2

Я пытаюсь добавить серию UINavigationControllers к единственному UIPageViewController, как если бы добавляли навигацию между страницами. Я сделал это с некоторым успехом со стандартными контроллерами представлений, но теперь я пытаюсь добавить навигационные контроллеры. Вот мой Раскадровка:Контроллеры Nav в контроллере просмотра страниц

enter image description here

То, что я хотел бы сделать, это Instantiate красть нав (как Snapchat) между всеми страницами в 3-й строке. Поскольку все они приводят к другим контроллерам представлений, каждый из них встроен в собственный контроллер навигации. Вот мой код:

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?'

Может ли то, что я пытаюсь сделать, выполнено? Если да, мне нужно каким-то образом изменить код или достичь этого совершенно по-другому?

+0

Получил это благодаря этому ответу: http://stackoverflow.com/questions/25387436/using-uipageviewcontroller-with-swift-and-multiple-view-controllers – chicobermuda

ответ

0

Протокол, который вы определили, находится в ViewController, но это должно быть определено в классе UIPageViewController.

class PageViewController: UIPageViewController, UIPageViewControllerDataSource { 
} 

Для этого нужно создать новый класс, который должен быть связан с Page View Controller, что вы взяли на раскадровке.

Смежные вопросы