2013-03-14 80 views
3

我正在尝试使用PageviewController。我有4 ViewControllers,但他们都是不同的。在一个我有一个图像,在第二个我有一个桌面,...PageviewController未按正确的顺序显示视图控制器

我想滚动它与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]; 
} 

我已经宣布和合成indexValueint。但出于某种原因,它有时会向我展示两次ViewOneController,或者它从ViewOneController到ViewThreeController等等。

有人可以帮助我吗?

亲切的问候

编辑

当我做到这一点。

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

它崩溃,此错误

+0

我看到你设置你的页面的视图控制器只包含第一个视图控制器。这是故意的吗? – giorashc 2013-03-14 08:33:25

+0

如果我用多个viewController填充数组viewController,应用程序崩溃 – Steaphann 2013-03-14 08:38:51

+0

我从来没有使用页面控制器,但从文档看来,你需要设置所有的视图控制器,所以也许有一个问题,你如何设置它们? – giorashc 2013-03-14 08:41:20

回答

0

“(4)提供不匹配(1),用于所请求的转变所需的数目视图控制器的数量”你有一个你的代码中几乎没有错误。

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

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

看这个代码:

- (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 
} 
  • 当存储所有在一个阵列中可能使用大量的存储器控​​制器。我建议你不要保留在modelArray属性中,而是在UIPageViewControllerDelegate协议方法中实例化它。
  • 祝你好运。

    相关问题