我正在尝试使用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)不匹配
答案 0 :(得分:0)
您的代码中有一些错误。
方法setViewControllers:
设置当前控制器可见。 self.modelArray
设置不正确,因为它包含您拥有的所有页面。您需要在UIPageViewController初始化后使用它(如果您想强制更改当前页面)。
您使用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
协议方法实例化它。