如何在UIPageViewController中设置第一页

当用户在UIPageViewController的第一页上,并尝试返回时,我只返回nil。 在iOS 5中,这工作正常。 这是导致在iOS 6崩溃。

 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The number of view controllers provided (0) doesn't match the number required (1) for the requested transition' 

这是我的代码。 当返回contentViewController而不是nil ,它工作正常。 我应该把什么,而不是nil

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { contentViewController = [[ContentViewController_iPhone alloc] init]; int currentIndex = [self.modelArray indexOfObject:[(ContentViewController_iPhone *)viewController labelContents]]; if ((currentIndex == 0) || (currentIndex == NSNotFound)) { //if on the first page, can't go back return nil; } contentViewController.labelContents = [self.modelArray objectAtIndex:currentIndex - 1]; return contentViewController; } 

我有同样的问题,发现只有当我更改pageviewcontrollers gestureRecognizers委托给我自己的控制器(这是经常如果你想取消分页当用户点击页面上的某些领域, 例如button )。

对我来说,它不会为iOS 6做这个重新分配。这很好,因为iOS处理触摸有点不同。 button或您自己的手势识别器在iOS 6下工作正常,因为他们有优先权,并会自动取消分页。

我希望这有帮助。

Xcode基于页面的应用程序模板的最新版本提供了以下代码:

 - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { NSUInteger index = [self indexOfViewController:(DataViewController *)viewController]; if ((index == 0) || (index == NSNotFound)) { return nil; } index--; return [self viewControllerAtIndex:index storyboard:viewController.storyboard]; } 

这应该够了吧 :-)

您需要将以下内容添加到您的代码中

 if (currentIndex == 0 || (index == NSNotFound)) { //if on the first page, can't go back return nil; }