我正在尝试将QLPreviewController的视图添加为子视图(不 - 我不能使用导航控制器或模态)。它只显示QLPreviewController的结构背景。
我创建一个并将其添加为子视图:
QLPreviewController* preview = [[[QLPreviewController alloc] init] autorelease];
preview.dataSource = self;
preview.delegate = self;
preview.view.frame = CGRectMake(0, 0, self.pdfPreviewView.frame.size.width, self.pdfPreviewView.frame.size.height);
self.pdfPreviewView.previewController = preview;
[self.pdfPreviewView addSubview:preview.view];
[preview reloadData];
我的QLPreviewControllerDataSource方法工作正常(一次查看1个pdf):
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index
{
NSString *path = [[ResourceManager defaultManager] pathForPDF:self.currentPDF];
NSURL *url = [NSURL fileURLWithPath:path];
if ([QLPreviewController canPreviewItem:url]) {
return url; // This always returns
}
return nil; // This line is never executed
}
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
{
return 1;
}
数据源方法总是返回文件url,而QLPreviewController说它可以打开文件,但实际上并没有。我只是得到了背景。在创建QLPreviewController之前设置了self.currentPDF
并确实包含了正确的信息(来自CoreData)。
委托方法永远不会被调用。但我也没有以标准方式使用它,所以这并非完全出乎意料。
我也尝试过调用[preview setNeedsLayout]
,[preview setNeedsDisplay']
和[preview refreshCurrentPreviewItem]
,但那些只是调用数据源方法而不会更改任何内容。
PDF有效。我可以在Xcode和Preview中打开它们,所以这不是问题所在。我有点难过为什么这不起作用。任何帮助都将得到赞赏,让这个工作。
答案 0 :(得分:3)
原来我发送了QLPreviewController错误的路径。它没有正确找到包中的PDF。我需要使用pathForResource:ofType:inDirectory
。