2011-11-07 1 views
3

QLPreviewController의 뷰를 서브 뷰로 추가하려고합니다 (아니오 - 탐색 컨트롤러 또는 모달을 사용할 수 없음). QLPreviewController의 패브릭 배경 만 보여줍니다.서브 뷰로 QLPreviewController를 추가해도 PDF가로드되지 않습니다.

나는 하나를 만들고 하위 뷰로 추가 :

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 모두에서 열 수 있으므로 문제는 아닙니다. 나는 이것이 왜 효과가 없을지에 대해 다소 혼란 스럽다. 이 도움이되는 데 도움이 될 것입니다.

+0

안녕하세요, QLPreviewController 버튼을 "일반"navigationItem 장소가 아닌 다른 장소에 배치하는 방법을 얻었습니까? – dulgan

답변

3

밖으로 나옵니다 QLPreviewController에 잘못된 경로를 보냈습니다. 번들에있는 PDF를 올바르게 찾지 못했습니다. pathForResource:ofType:inDirectory을 사용해야했습니다.