2

我是UIPageViewController第一次使用。当然是 iOS5,我对 ARC 很满意。我没有使用故事板。

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

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

- (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];
}

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

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

4

1 回答 1

5

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

  • 使用UIPageViewController有效的脊椎位置正确初始化。
  • 的属性已设置(UIPageViewControllerdoubleSided脊椎位置一致)。
  • 的数组已设置(再次,UIPageViewControllerviewControllers脊椎位置和doubleSided属性一致)。

看起来您没有在代码中设置doubleSidedYES(因为您的viewControllers数组中有两个项目)。viewControllers在设置数组之前添加它可以解决您的问题吗?

编辑:只是为了后代,在UIPageViewController 文档中有一个图表描述setViewControllers:direction:animation:completion:方法显示允许所有有效组合脊柱位置和doubleSided.

于 2012-01-14T03:38:33.300 回答