使用页面视图控制器出错

时间:2015-12-26 03:16:09

标签: ios swift uipageviewcontroller

我一直收到以下错误:

  

***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:'提供的视图控制器数量(0)与所需的数量(1)不匹配请求过渡。'

我不确定我PageViewController中可能导致此错误的错误。我还试着按照here提供的答案。但是,解决方案对我没有帮助,因为我不确定我的代码中哪一部分可能导致问题。我对Swift很新,所以任何帮助都会非常感激。

更新 我发现setViewController导致了问题,并在删除时消失了。但是,为什么会导致问题呢? 谢谢!

    var pageViewController: UIPageViewController!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.
    self.pageViewController = harishStoryboard.instantiateViewControllerWithIdentifier("ViewController1") as! UIPageViewController
    self.pageViewController.dataSource = self
    let allViewControllers = [harishStoryboard.instantiateViewControllerWithIdentifier("ViewController2") as! ViewController2, harishStoryboard.instantiateViewControllerWithIdentifier("ViewController3") as! ViewController3, harishStoryboard.instantiateViewControllerWithIdentifier("ViewController4") as! ViewController4, harishStoryboard.instantiateViewControllerWithIdentifier("ViewController5") as! ViewController5, harishStoryboard.instantiateViewControllerWithIdentifier("ViewController6") as! ViewController6, harishStoryboard.instantiateViewControllerWithIdentifier("ViewController7") as! ViewController7]
    let viewControllers = NSArray(object: allViewControllers)
    self.pageViewController.setViewControllers(viewControllers as? [UIViewController], direction: .Forward, animated: false, completion: nil)
    self.addChildViewController(pageViewController)
    self.view.addSubview(self.pageViewController.view)
    self.pageViewController.didMoveToParentViewController(self)
}

2 个答案:

答案 0 :(得分:5)

这不是页面视图控制器的工作方式。您不传递多个视图控制器,但只传递一个或最多两个。请参阅apple docs:

  

定义页面视图控制器界面时,您可以一次提供一个内容视图控制器(或一次两个,具体取决于脊椎位置和双侧状态)或使用数据源按需提供。当一次提供一个内容视图控制器时,可以使用setViewControllers:direction:animated:completion:方法设置当前内容视图控制器。要支持基于手势的导航,必须使用数据源对象提供视图控制器。

我假设你想要手势基础导航,所以你需要实现页面视图控制器委托和数据源。谷歌上有很多页面视图控制器教程。

答案 1 :(得分:0)

方法集setViewControllers期望仅显示第一个视图控制器!尝试这样:

if let firstVC = myViewControllers?.first {
    setViewControllers([firstVC], direction: .forward, animated: true)
}

myViewControllers是我的UIPageViewController子类的属性!

希望它对您有用!