首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIPageViewController错误

UIPageViewController错误
EN

Stack Overflow用户
提问于 2013-04-03 21:19:00
回答 1查看 487关注 0票数 2

在我的项目中,我使用了一个从故事板添加一些viewControllers的UIPageViewController。我在这里做了一个非常简单的示例项目:http://www.2shared.com/file/Rz0G1b5C/pageScroll.html (选择iPhone模拟器),正如你所看到的,我得到了错误The number of provided view controllers (3) doesn't match the number required (1) for the requested spine location (在我的实际项目中,它是transition而不是spine location,但是我做的每件事都与我的实际项目中相同。我已经搜索了堆栈溢出,但找不到我的问题的任何答案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-03 21:40:37

当我第一次使用页面视图控制器时,我很难弄明白这一点,但这是因为你一次给页面视图控制器提供了所有的视图控制器,所以它试图同时显示3个视图控制器,但这种类型的书脊一次只支持一个视图控制器。那么为什么它一次需要超过1个呢?如果您将书脊放在页面的中间(我想在iPad上更常见),您可以同时显示两个视图控制器,因此每次都需要向page view Controller提供一个数组。在大多数情况下,您只想显示一个对象,因此在运行setViewControllers时,您应该只将初始页面作为单对象数组放入控制器中。

要翻转页面,需要在示例代码中将Page View Controller设置为UIPageViewControllerDataSource,然后使用这些函数来调入和调出所需的控制器。数据源提供了viewControllerAfterViewControllerviewControllerBeforeViewController函数,您可以使用它们来确定数组中的下一个视图控制器。您的数组和控制器都是在本地声明的,所以当我这样做时,我使用的一种方法是使数组成为头文件中的一个变量,您可以在整个Page View Controller中引用该变量,而不是像您在示例中那样在viewDidLoad中本地声明它。像在viewDidLoad中一样填充它,然后只将包含first对象的数组发送到setViewControllers中。

代码语言:javascript
复制
NSArray *initialViewControllers = [[NSArray alloc] initWithObjects:[viewControllersArray objectAtIndex:0], nil];
[self setViewControllers:initialViewControllers
               direction:UIPageViewControllerNavigationDirectionForward
                animated:YES
              completion:^(BOOL finished){
                  NSLog(@"call back success");}];

因此,在这些数据源函数中,您可以找出当前视图控制器在视图控制器数组中的位置,然后返回下一个索引中的那个,对于viewControllerAfterViewController,返回前一个索引中的那个;对于viewControllerBeforeViewController,返回前一个索引中的那个

代码语言:javascript
复制
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController {
    if ([viewControllersArray containsObject:viewController]) {
        NSInteger index = [viewControllersArray indexOfObject:viewController];
        if (index < [viewControllersArray count] && index > 0) {
            return [viewControllersArray objectAtIndex:(index - 1)];
        }
    }
    return nil;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController {
    if ([viewControllersArray containsObject:viewController]) {
        NSInteger index = [viewControllersArray indexOfObject:viewController];
        if (index < [viewControllersArray count] - 1) {
            return [viewControllersArray objectAtIndex:(index + 1)];
        }
    }
    return nil;
}

通过实现这些功能,您在页面视图控制器中一次只有一个视图控制器,并且您可以根据需要对它们进行调入和调出。它们会保存在你的viewControllerArray中,这样你就可以切换回原来的控制器了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15788458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档