如何在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; }