3

我正在尝试使用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];
}

我已声明并综合indexValueint. 但由于某种原因,它有时会向我显示两次 ViewOneController 或者它从 ViewOneController 转到 ViewThreeController 等等。

有人能帮我吗?

亲切的问候

编辑

当我这样做时。

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

它因此错误而崩溃

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

4

1 回答 1

0

您的代码中有一些错误。

  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
}
  1. 当您将所有控制器存储在一个阵列中时,它可能会使用大量内存。我建议你不要保留modelArray属性,而是在UIPageViewControllerDelegate协议方法中实例化它。

祝你好运。

于 2014-11-28T13:04:12.440 回答