2011-04-06 5 views
0

두 개의 UIWebView가 있습니다. 하나는 일반 파일을 처리하고 다른 하나는 PDF를 처리하는 UIWebView입니다 (다른 웹보기의 상단에 오버레이로 열림). 내 응용 프로그램 몇 가지 문제가 발생 pdfViewer.delegate = self;동일한 ViewController에서 여러 UIWebView를위한 대리인 설정

//Options for webView 
webView.delegate = self; 
webView.scalesPageToFit = YES; 
for (id subview in webView.subviews) 
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) 
     ((UIScrollView *)subview).bounces = NO; 

//Options for pdfViewer 
pdfViewer.delegate = self; 
pdfViewer.scalesPageToFit = YES; 
for (id subview in pdfViewer.subviews) 
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) 
     ((UIScrollView *)subview).bounces = NO; 

라인 :

두 webviews는 다음과 같이 설정합니다. 나는 webViewDidFinishLoad을 사용하는 대리자 메서드를 가지고 있으므로 self 두 뷰 중 delegate이 필요합니다. 설정되지 않은 경우, 즉 주석 처리합니다. 보기에서 PDF가로드되지만 webViewDidFinishLoad은 예상대로 실행되지 않습니다. 그러나 회선을 다시 활성화하면 PDF가보기에 전혀로드되지 않습니다. 어떤 종류의 충돌이 있습니까? UIWebViewsdelegate = self을 복수 할당 할 수 있습니까?

업데이트 :

#import "MyViewController.h" 

@implementation MyViewController 

@synthesize webView; 

//these two just appear to show the page is loading. 
@synthesize loadingView; 
@synthesize linkLoadView; 

//pdfViewer is contained within topView 
@synthesize topView; 
@synthesize pdfViewer; 


- (void)viewDidLoad { 
[super viewDidLoad];  

linkLoadView.alpha=0.0; 
[topView removeFromSuperview]; 

//Options for 
webView.delegate = self; 
webView.scalesPageToFit = YES; 
for (id subview in webView.subviews) 
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) 
     ((UIScrollView *)subview).bounces = NO; 

//Options for 
//pdfViewer.delegate = self; 
pdfViewer.scalesPageToFit = YES; 
for (id subview in pdfViewer.subviews) 
    if ([[subview class] isSubclassOfClass: [UIScrollView class]]) 
     ((UIScrollView *)subview).bounces = NO; 

NSURL *filePath = [NSURL URLWithString:@"*webaddress*/index.html"]; 
NSURLRequest *requestObj = [NSURLRequest requestWithURL:filePath]; 
[webView loadRequest:requestObj]; 
} 

- (BOOL) webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; { 
    /* Add Content Loading Banner */ 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
     [self.view addSubview:linkLoadView]; 
     linkLoadView.alpha = 1.0; 
    } 

    /* Handle PDF Opening */ 
    NSURL *url = [request URL]; 
    NSString *urlString = [url absoluteString]; 
    if([urlString rangeOfString:@".pdf"].location == NSNotFound){ 
     return true; 
    } else { 
     NSURL *filePath = [NSURL URLWithString:urlString]; 
     NSURLRequest *requestObj = [NSURLRequest requestWithURL:filePath]; 
     [pdfViewer loadRequest:requestObj]; 

     [self.view addSubview:topView]; 
     [self.view addSubview:linkLoadView]; 

     return false; 
    } 

} 

- (void) webViewDidFinishLoad:(UIWebView *)theWebView{ 
    NSLog(@"Fired");  
} 

@end 
+0

webViewDidFinishLoad에서 무슨 일이 벌어지고 있습니까? – mbehan

+0

@mbehan 그것은 단지 NSLog 일뿐입니다. webViewDidFinishLoad가 pdfViewer에 대해 실행되지 않는다고 webView가 이미로드 되었기 때문에 그렇게 생각합니까? –

답변

1

당신은 .... 등 shouldLoadRequest 같이있는 UIWebView 위임에서 다른 방법을 무시하고 있습니까?

하나의 대리인이 여러 웹보기에 참여하는 데 문제가 없으므로 무언가가 정상적인 요청 프로세스를 어딘가에서 멈추고 있다고 생각합니다.

+0

코드에 추가하겠습니다. 직접 볼 수 있습니다. –

+0

shouldStartLoadWithRequest를 사용하고 있습니다. PDF인지 아닌지를 결정하여 다른 WebView에서 여는 기능입니다. –

+0

천재입니다. shouldStartLoadWithRequest의 PDF 처리 부분을 우회 할 수있는 변수를 만들었습니다. PDF 설정이 한 번 완료되었습니다. 건배! –