PageviewController没有按正确的顺序显示viewcontrollers

时间:2013-03-14 08:20:53

标签: iphone ios objective-c uipageviewcontroller

我正在尝试使用PageviewController。我有4 ViewControllers但他们都不同。在一个我有一个图像,在第二个我有一个tableview,...

我想用pageviewController滚动浏览它。所以我做的是以下内容。我已将它们添加到modelArray

ViewOneViewController *viewOne = (ViewOneViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewOne"];
ViewTwoViewController *viewTwo = (ViewTwoViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewTwo"];
ViewThreeViewController *viewThree = (ViewThreeViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"ViewThree"];
ViewFourViewController *viewFour =(ViewFourViewController *) [self.storyboard instantiateViewControllerWithIdentifier:@"ViewFour"];

self.modelArray = [[NSMutableArray alloc] initWithObjects:viewOne,viewTwo,viewThree,viewFour,nil];

接下来我像这样设置我的pageviewController。

 ViewOneViewController *cVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewOne"];
    NSArray *viewControllers = [NSArray arrayWithObject:cVC];
    [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

现在浏览pageviewViewController我有以下功能。

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
{
    indexValue--;
    if (indexValue < 0) {
        return nil;
    }
    return [self.modelArray objectAtIndex:indexValue];
}
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    indexValue++;
    if (indexValue > self.modelArray.count) {
        NSLog(@"crash");
        return nil;
    }
    return [self.modelArray objectAtIndex:indexValue];
}

我已将indexValue声明并合成为int。但由于某种原因,它有时会向我显示两次ViewOneController,或者从ViewOneController到ViewThreeController等等。

有人可以帮助我吗?

亲切的问候

修改

当我这样做时。

[self.pageViewController setViewControllers:self.modelArray direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];

它因此错误而崩溃

'提供的视图控制器数量(4)与请求的转换所需的数量(1)不匹配

1 个答案:

答案 0 :(得分:0)

您的代码中有一些错误。

  1. 方法setViewControllers:设置当前控制器可见。 self.modelArray设置不正确,因为它包含您拥有的所有页面。您需要在UIPageViewController初始化后使用它(如果您想强制更改当前页面)。

  2. 您使用UIPageViewControllerDelegate的方式不正确。 indexValue班级成员没有必要。在这种方法中,您应该找出下一个控制器(来自viewController方法参数)或之前的控制器,并返回另一个控制器。

  3. 看看这段代码:

    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
          viewControllerBeforeViewController:(UIViewController *)viewController
    {
        if ([viewController isKindOfClass:[ViewOneViewController class]]) {
            return nil;
        } else if ([viewController isKindOfClass:[ViewTwoViewController class]]) {
            return [self.modelArray objectAtIndex:0]; // return ViewOneViewController class instance
        } else if 
        //... etc
    }
    
    - (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
           viewControllerAfterViewController:(UIViewController *)viewController
    {
        // vice versa
    }
    
    1. 当您将所有控制器存储在一个阵列中时,它可能会占用大量内存。我建议你不要保留modelArray属性,而是用UIPageViewControllerDelegate协议方法实例化它。
    2. 祝你好运。