Установка делегата для нескольких UIWebView на одном ViewController - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть два UIWebView, один для обработки обычных файлов и один для обработки PDF-файлов (который открывается как наложение поверх другого веб-представления).

Оба веб-просмотра настроены, как показано ниже:

//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;

строка pdfViewer.delegate = self; вызывает у моего приложения некоторые проблемы.У меня есть метод делегата, который я использую webViewDidFinishLoad, поэтому мне нужно, чтобы delegate обоих представлений было self.Если он не установлен, то есть я его комментирую.Файл PDF загружается в виде, но webViewDidFinishLoad не запускается, как вы ожидаете.Однако, если я повторно активирую строку, PDF вообще не загружается в представление.Происходит ли какое-то столкновение?Могу ли я назначить несколько UIWebViews delegate = 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

1 Ответ

1 голос
/ 06 апреля 2011

Переопределяете ли вы какие-либо другие методы из делегата UIWebView, такие как shouldLoadRequest и т. Д.? ...

Нет проблем с наличием одного делегата для нескольких веб-просмотров, поэтому я предполагаю, что что-то останавливает нормальный процесс запроса где-то.

...