UIPageViewController作为应用程序的根控制器

时间:2012-01-12 17:42:48

标签: objective-c ios5 uipageviewcontroller

我第一次使用UIPageViewController。当然,iOS5和我对ARC很满意。我使用Storyboard。

在我看到的所有零碎的例子中,UIPageViewController从不“拥有”屏幕。它始终是其他视图控制器的子项。这是一个要求吗?我想让它成为我的应用程序的根控制器,就像通常使用UINavigationController一样。我试图以编程方式设置它,但我得到的只是一个空的页面视图控制器,其中没有内容。

这是应用程序的开始方式(这里的所有代码都在我的app委托类中):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    [self configureLoggers];
    [self applyAppearanceProxySettings];
    [self configureDataStore];
    [self configureNavigationController];
    [self configurePageController];    // <-- this is where we do the page view controller setup, shown next.

    self.window.rootViewController = self.pageController;
    [self.window makeKeyAndVisible];

    log4Info(@"Application completed launching.");

    return YES;
}

上面代码中提到的那个方法,用于页面视图控制器的设置:

- (void)configurePageController {
    CCFrontCoverViewController *frontCoverViewController = [[CCFrontCoverViewController alloc] initWithNibName:nil bundle:nil];

    NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:UIPageViewControllerSpineLocationMin]
                                                    forKey:UIPageViewControllerOptionSpineLocationKey];

    self.pageController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                      navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal
                                                                    options:options];

    self.pageController.delegate = self;
    self.pageController.dataSource = self;
    self.pageController.view.backgroundColor = [UIColor redColor]; // So we know we're missing content because red shows through.

    NSArray *pageViewControllers = [NSArray arrayWithObjects:frontCoverViewController, self.navigationController, nil];
    [self.pageController setViewControllers:pageViewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:nil];
}

我还记录了两个数据源回调方法,它们甚至都没有被调用。

当这个运行时,我只是得到一个空白的红色屏幕。同样,没有涉及故事板。我错过了什么?

1 个答案:

答案 0 :(得分:5)

我能够在示例项目中使用UIPageViewController作为根视图控制器,前提是:

  • 使用有效的脊椎位置正确初始化UIPageViewController
  • UIPageViewController的{​​{1}}属性已设置(与脊椎位置一致)。
  • 设置doubleSided的{​​{1}}数组(再次,与主干位置和UIPageViewController属性一致)。

您的代码中似乎没有将viewControllers设置为doubleSided(因为您的doubleSided数组中有两个项目)。在设置YES数组之前添加它会解决您的问题吗?

编辑:仅针对子孙后代,在UIPageViewController docs中,viewControllers方法的说明中有一个图表,显示了所有有效组合允许的视图控制器数量脊柱位置和viewControllers