UIPageViewController 根本不起作用;完全空白

Posted

技术标签:

【中文标题】UIPageViewController 根本不起作用;完全空白【英文标题】:UIPageViewController doesn't work at all; totally blank 【发布时间】:2012-01-31 00:05:08 【问题描述】:

所以,

我正在尝试将 UIPageViewController 与自定义应用程序工作流一起使用,但我正在完全按照文档中的建议实施它。

 self.pageViewController = [[[UIPageViewController alloc]  initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                            navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil] autorelease]; 

//calls setViewControllers:direction:animated:completion with valid UIViewControllers
[self setupPagesWithIndex:0]; 

self.pageViewController.delegate = self;
self.pageViewController.dataSource = self;

self.view.frame = CGRectMake(0, 0, 1024, 768);

self.pageViewController.view.backgroundColor = [UIColor grayColor];

这里是我设置视图控制器的地方...

- (void) setupPagesWithIndex:(NSInteger) index

    UIViewController* vc1 = [self uicontrollerForIndex:index];
    UIViewController* vc2 = [self uicontrollerForIndex:index+1];
    [self.pageViewController setViewControllers:[NSArray arrayWithObjects:vc1,vc2, nil] 
                                      direction:UIPageViewControllerNavigationDirectionForward 
                                       animated:NO 
                                     completion:nil];

屏幕上唯一出现的是灰色背景色。我已经验证UIViewControllers 是有效的,有很好的框架,我什至给了它们背景颜色,以便我可以看到 一些东西

这就是我将 UIPageViewController 添加到屏幕的方式:

 [[self rootViewController] addChildViewController:self.pageViewController];
 [[self rootViewController].view addSubview:self.pageViewController.view];

[self rootViewController] 返回应用程序的 rootViewController。

视图绝对是可见的,因为我可以看到我应用的背景色...但是,UIPageViewController 完全是空白的!

我实现了所有的数据源和委托方法并采用了协议;他们甚至从来没有被叫过!

我的问题是;当您以编程方式执行所有操作时,UIPageViewController 显示页面的所有要求是什么?

编辑#1,每个请求: 此类是我自己的应用程序构建框架中 UIPageViewController 的控制器。我现在为控制器提供了两种构建页面的方法——从图像名称或从一种资产密钥。无论哪种情况,它最终都会返回一个我用 UIViewController 包装的视图。

我用

创建视图控制器
UIViewController* vc = [[[PageTest alloc] initWithNibName:@"PageTest" bundle:nil] autorelease];

'PageTest' 只是一个带有相应 nib 的 UIViewController,除了自动生成的设置外,它是空白的。然后,我将我的自定义视图作为子视图添加到此视图控制器。这是从 uicontrollerForIndex 返回的:

编辑#2,进一步发现

我找到了一种展示书架的方法;如果我只用一个视图控制器初始化它,它将显示翻书机。两个视图控制器是否完全是不同的类并不重要;如果我用其中两个 setViewControllers 则什么都不会显示。

如果我在委托方法中返回UIPageViewControllerSpineLocationMid

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation

然后在旋转时,应用程序将崩溃而没有可识别的回溯。

【问题讨论】:

能否提供“[self uicontrollerForIndex:index];”的信息方法? 当您使用addChildViewController: 操作viewController 层次结构时,您还需要调用[self.pageViewController didMoveToParentViewController:self]; 【参考方案1】:

随着,

 - (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation

方法,在返回spineLocation之前必须调用setViewControllers

【讨论】:

以上是关于UIPageViewController 根本不起作用;完全空白的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController - 以编程方式更改页面在 iPhone 4s/5/5s 上不起作用

Swift canEditRowAtIndexPath 在 UIPageViewController EZSwipeViewController 中不起作用

使用 UIPageViewController 在多个视图控制器之间滑动

UIPageViewController 带有最后一个视图,没有页面指示器

使用 UIPageViewController 导航

UIPageViewController 具有一个恒定的背景图像