【问题标题】:addSubview not calling QLPreviewControllerDataSource instances when offlineaddSubview 离线时不调用 QLPreviewControllerDataSource 实例
【发布时间】:2013-03-27 21:05:55
【问题描述】:

我有下面一段代码来添加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

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

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

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

【问题讨论】:

标签: ios addsubview qlpreviewcontroller


【解决方案1】:

您可能会遇到奇怪的行为,因为 QLPreviewController 的视图并非旨在嵌入到另一个视图中。来自QLPreviewController class reference 概述:

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

话虽如此,你可以试试:

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

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

祝你好运!

【讨论】:

  • 谢谢!我不得不强制 viewDidAppear 让它工作,这对我来说似乎工作得很好。
  • 非常感谢。被这个问题困了很久,[self.previewController reloadData] 完美地为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-19
  • 2016-12-23
相关资源
最近更新 更多