3

我正在尝试将 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 说它可以打开文件,但实际上从来没有。我只是了解背景。self.currentPDF是在我创建 QLPreviewController 之前设置的,并且确实包含正确的信息(来自 CoreData)。

委托方法永远不会被调用。但我也没有以标准方式使用它,所以这并不完全出乎意料。

我也尝试过调用[preview setNeedsLayout], [preview setNeedsDisplay'][preview refreshCurrentPreviewItem]但是那些只是调用数据源方法并且没有改变任何东西。

PDF 是有效的。我可以在 Xcode 和 Preview 中打开它们,所以这不是问题。我有点难过为什么这行不通。任何帮助将不胜感激。

4

1 回答 1

3

原来我向 QLPreviewController 发送了错误的路径。它没有正确找到捆绑包中的 PDF。我需要使用pathForResource:ofType:inDirectory.

于 2011-11-08T15:42:26.360 回答