1

我有以下代码来添加QLPreviewController子视图

{
    QLPreviewController *preview = [[QLPreviewController alloc] init];
    preview.delegate = self;
    preview.dataSource = self;
    [self addChildViewController:preview];
    [self.view addSubview:preview.view];
    [preview didMoveToParentViewController:self];
    self.previewController = preview;
}

-(NSInteger) numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
    return 1;
}

-(id) previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)index
{
    return self.url;
}

self.url是一个NSURL that位于 NSTemporaryDirectory - file://localhost//.../blah.pdf

我的问题是,当我的笔记本电脑连接到互联网时,文档显示为子视图,但是当我的笔记本电脑未连接时,并且numberOfPreviewItemsInPreviewController不会previewItemAtIndex被调用。

  • 我尝试了一个带有简单视图控制器的香草程序,它似乎工作正常。(我的应用程序比这更复杂)。
  • 当我尝试将文档显示为模态视图时,无论模拟器是否连接到互联网,它似乎都可以工作。 [self presentViewController:preview animated:NO completion:nil];--> 始终如一地工作。

我需要让子视图适用于在线和离线模式,如果有人可以提供帮助,那就太好了!

4

1 回答 1

2

您可能会遇到奇怪的行为,因为 QLPreviewController 的视图并非旨在嵌入到另一个视图中。从QLPreviewController 类参考概述:

要显示 Quick Look 预览控制器,您有两个选择:您可以使用 UINavigationController 对象将其推送到视图中,或者可以使用其父类 UIViewController 的 presentModalViewController:animated: 方法以模态方式全屏显示它。

话虽如此,您可以尝试:

  1. 强制 QLPreviewController (重新)显示其内容。尝试添加[self.previewController reloadData];到第一个方法的末尾。这应该强制触发数据源方法。

  2. 强制视图“刷新”它的子视图:([self.view setNeedsLayout]实际上可能会像第一个选项一样强制 reloadData)。

祝你好运!

于 2013-03-28T09:13:14.290 回答