如何在UIPageViewController中设置第一页

时间:2012-10-08 17:33:07

标签: iphone objective-c ios ipad 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;

}

3 个答案:

答案 0 :(得分:10)

我遇到了同样的问题并且发现只有当我将pageviewcontrollers gestureRecognizers的代理更改为我自己的控制器时才会发生这种情况(如果您想在用户点击页面上的某些区域时取消分页,这通常会发生,例如按钮)。

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

我希望这会有所帮助。

答案 1 :(得分:0)

您需要在代码中添加以下内容

if (currentIndex == 0 || (index == NSNotFound)) {

    //if on the first page, can't go back
    return nil;

 }

答案 2 :(得分:0)

最新版本的Xcode Page Based Application模板提供以下代码:

- (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];
}

应该这样做:-)