iOS – 通过Quicklook打开PDF,而不使用UIScrollView
我试图通过QuickLook框架打开一个PDF,而不使用UIScrollView …
我相信我错过了一些东西
我相信我会错误的是,我需要使用QLPreviewController,并在QLPreviewController是一个数据源,必须符合QLPreviewItem。 该文档指出,NSURL确实符合QLPriewItem,所以我将preview.dataSource设置为引发错误的NSURL:
[NSURL numberOfPreviewItemsInPreviewController:]:无法识别的select器发送到实例
终止由于未捕获exception“NSInvalidArgumentException”的应用程序,原因:' – [NSURL numberOfPreviewItemsInPreviewController:]:无法识别的select器发送到实例0x5b5f200'
这使我认为NSURL不符合。
我认为所有的代码是必要的…
- (BOOL)previewController:(QLPreviewController *)controller shouldOpenURL:(NSURL *)url forPreviewItem:(id <QLPreviewItem>)item { return YES; } - (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return [documents count]; } - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index { return [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[documents objectAtIndex:index] ofType:nil]]; } - (void)pushPDF { QLPreviewController *preview = [[QLPreviewController alloc] init]; preview.dataSource = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"MCIT_Quiz" ofType:@"pdf"]]; //preview.currentPreviewItemIndex = 0; [self presentModalViewController:preview animated:YES]; [preview release]; }
那么,我没有看到一个NSURL符合QLPreviewControllerDataSource。 我想你想要
preview.dataSource = self;
然后你已经编写的例程(numberOfPreviewItemsInPreviewController和previewController)将返回适当的NSURL(虽然不清楚“文档”如何填充)。
我最终创build了另一个类来保存我的值,并作为一个数据源使用,有点快而肮脏,但它的工作原理。
// // documentList.h // #import <Foundation/Foundation.h> #import <QuickLook/QuickLook.h> @interface DocumentList : NSObject <QLPreviewControllerDataSource, QLPreviewControllerDelegate> { NSArray *documents; } @property (nonatomic, retain) NSArray *documents; -(void)createList; -(NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller; - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index; @end
插入文本来分解文件
// // documentList.m // #import "DocumentList.h" @implementation DocumentList @synthesize documents; -(void) createList { documents = [[NSArray arrayWithObjects:@"Quiz.pdf", nil] retain]; } -(NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller { return [documents count]; } - (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index { return [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[documents objectAtIndex:index] ofType:nil]]; } @end