2012-08-23 16 views
12

iOS documention dice que la clase UIWebView se ajusta a UIScrollViewDelegate. Pero una instancia de UIWebView no llama al método scrollViewDidScroll de su controlador. El delegado se encuentra a la derecha por¿Por qué una instancia de UIWebView no llama a scrollViewDidScroll?

[webView setDelegate:self]; 

y webViewDidFinishLoad se llama éxito. El controlador implementa dos delegados, UIWebViewDelegate y UIScrollViewDelegate, como este:

@interface WebviewController : UIViewController<UIWebViewDelegate, UIScrollViewDelegate>{ 
    UIWebView *webView; 
} 

Navegar por cables de forma que a category solution:

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

Esa categoría de aproximación hace básicamente lo mismo: Llamando al método scrollViewDidScroll del delegado. Entonces, ¿por qué el primer acercamiento no funciona?

+2

hicieron usted establece delegate para scrollView? 'webView.scrollView.delegate = self'? – pawelropa

+0

No, no lo hice. Y sí, eso funciona! – alex

+0

Entonces, ¿una instancia 'UIWebView' establece su delegado' scrollViews' en esa instancia de forma predeterminada? Parece ... De lo contrario, el enfoque de la categoría no funcionaría. – alex

Respuesta

28

Supongo que configura el delegado solo para UIWebView. Intenta configurar el delegado de scrollView.

webView.scrollView.delegate = self 

debería estar bien.

+0

No funcionó para mí –

+1

Considere el uso de KVO en la propiedad 'contentOffset' del niño' scrollView' en su lugar. No tiene que ser seguro modificar la propiedad de delegado de 'UIScrollView' ya que' UIWebView' puede usarlo internamente. – lipka

0

Esto no es correcto. Si va a utilizar:

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

Va a perder el enfoque cuando se trate de introducir datos en la página en iOS7 y más

Es necesario implementar la clase personalizada para UIWevView y sobrescribir scrollViewDidScroll:

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