2014-11-11 2 views
0

Я создаю приложение для iOS.Как подождать, пока вызывается webViewDidFinishLoad?

Я отделил PDF, который имеет несколько страниц в каждые страницы,

А затем создать UIWebViews, чтобы показать каждую страницу.

Код выглядит следующим образом.

for(int i = 0; i < _pageNumbers; i++) 
{ 
    _webView = [[UIWebView alloc]init]; 
    _webView.delegate = self; 
    _webView.frame = imageViewFrame; 
    _webView.scalesPageToFit = YES; 
    _webView.autoresizingMask = 
    UIViewAutoresizingFlexibleLeftMargin | 
    UIViewAutoresizingFlexibleWidth  | 
    UIViewAutoresizingFlexibleRightMargin | 
    UIViewAutoresizingFlexibleTopMargin | 
    UIViewAutoresizingFlexibleHeight  | 
    UIViewAutoresizingFlexibleBottomMargin; 
    [self setImageAtIndex:i toScrollView:imageScrollView]; 
} 

- (void)setImageAtIndex:(NSInteger)index toScrollView:(ImageScrollView*)ScrollView 
{ 
    UIWebView *theWebView = (ScrollView.subviews)[0]; 
    if (index < 0 || [webViews count] <= index) { 
     theWebView = nil; 
     return; 
    } 

    dispatch_queue_t queueLoadPDF = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
    dispatch_sync(queueLoadPDF, ^{ 
     NSString *document = [[[[NSString alloc]initWithString:_documwntPath]stringByAppendingString:@"/"]stringByAppendingFormat:@"Page%zd.pdf",(index + 1) ]; 

     NSURL *url = [NSURL fileURLWithPath:document]; 
     NSString *urlString = [url absoluteString]; 
     NSString *encodedString=[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     NSURL *webURL = [NSURL URLWithString:encodedString]; 
     NSURLRequest *req = [NSURLRequest requestWithURL:webURL]; 
     [theWebView loadRequest:req]; 
    }); 
} 

Страницы PDF являются большими. После вызова loadRequest программа вернется к циклу и создаст новый UIWebview.

Я хочу дождаться, пока вызывается webViewDidFinishLoad перед возвратом в цикл.

Есть ли какие-либо решения?

Благодарим за помощь.

+0

Почему вы не вызываете - (void) setImageAtIndex: (NSInteger) index toScrollView: (ImageScrollView *) ScrollView в webViewDidFinishLoad? – HMHero

+0

@ Masaru Kitajima Я думаю, вы должны интегрировать делегата веб-представления и вызвать '[self setImageAtIndex: i toScrollView: imageScrollView];' этот метод из 'webViewDidFinishLoad:' method.take 'i' как глобальный и увеличивать его на каждом' webViewDidFinishLoad'.i думаю, что это сработает. Не используйте для цикла. –

+0

Я не совсем уверен, что вы упомянули. (void) setImageAtIndex: (NSInteger) index toScrollView: (ImageScrollView *) ScrollView предназначен для загрузки PDF в UIWebView, и я хочу дождаться загрузки PDF-файла. –

ответ

0

@ МасаруКитаджима, это трудно понять, что вы пытаетесь сделать. Мои первоначальные мысли были такими же, как @Chinttu -Maddy-Ramani's, но когда я снова посмотрел на ваш код, я вижу больше проблем с моими грубыми предположениями. Я брошу пару вопросов, и вы должны подумать о своем дизайне, когда будете отвечать.

Как-то ваш код для меня не имеет смысла. Я вижу [webViews count] в вашем коде. У вас есть несколько веб-просмотров в режиме прокрутки? Но я вижу _webView, который, я думаю, является переменной-членом, и вы инициируете его в for-loop? что это делает? Вы должны быть в состоянии ответить на это в первую очередь. Возможно, вы загружаете только один веб-просмотр не потому, что не знаете, как загрузить следующий веб-просмотр в webViewDidFinishLoad, но потому, что у вас есть только один веб-просмотр?

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

+0

Благодарю вас за ваш комментарий. Я создаю несколько UIWebviews в for-loop, а «webViews» - это NSMutableArray, и каждый раз, когда я создаю UIWebview, я делаю [webViews addObject: _webView]; для хранения каждого UIWebView. Для вопроса 2 я хочу загрузить один UIWebView за один раз, и как только загрузка будет завершена, я думаю, webViewDidFinishLoad. Затем я хочу перейти к следующему UIWebView. –

+0

Вы обновляете _webView в каждом цикле цикла. Где вы запускаете [webViews addObject: _webView] ;? – HMHero

+0

Я думал, что создаю новый экземпляр _webView в каждом for-ioop. Я запустил [webViews addObject: _webView]; сразу после [self setImageAtIndex: i toScrollView: imageScrollView] ;. –

Смежные вопросы