Вызов метода при прокрутке UIWebView

У меня есть UIWebView, который содержит много текстового содержимого. Мне нужно иметь возможность получать местоположение UIWebView каждый раз, когда он перемещается. Я использую этот код, чтобы получить точку:

pageYOffset = [[webView stringByEvaluatingJavaScriptFromString:@"window.pageYOffset"] intValue];

теперь мне просто нужно сделать так, чтобы значение этой переменной обновлялось при каждом перемещении позиции UIWebView или при любой прокрутке. Можно ли вызвать метод всякий раз, когда прокручивается UIWebView?

4 ответа

Решение

Вы должны расширить UIWebView, как показано ниже

@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
    [self.delegate scrollViewDidScroll: scrollView];
}
@end

и реализовать scrollViewDidScroll на вашем контроллере, как:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
    NSLog("webview scrolled");
}

и не забудьте установить свой контроллер на свойство делегата UIWebView.

Я считаю, что если ваш заголовок перечисляет ваш VC как UIScrollViewDelegate, вы можете использовать -(void)scrollViewDidScroll:(UIScrollView *)scrollView способ узнать, когда он прокручивается.

Это не правильно. Если вы будете использовать:

@implementation UIWebView(CustomScroll)
- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
    [self.delegate scrollViewDidScroll: scrollView];
}
@end

Вы потеряете фокус при попытке ввести данные на странице на iOS7 и более

Вам нужно реализовать пользовательский класс для UIWevView и перезаписать scrollViewDidScroll:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView{
[super scrollViewDidScroll:scrollView];
[((id<UIScrollViewDelegate>)self.delegate) scrollViewDidScroll:scrollView];
}

Если ваше требование состоит в том, чтобы продолжать загружать webview, когда пользователь прокручивает, тогда вы должны вставить свой код

- (void)webViewDidStartLoad:(UIWebView *)webView
Другие вопросы по тегам