Я пытаюсь добавить представление 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, так что это не проблема. Я немного озадачен тем, почему это не сработает. Любая помощь будет принята за то, чтобы заставить это работать.