Cómo utilizar correctamente el delegado de webkit para iniciar y detener un spinner, OS X, OBJ-C
-
12-12-2019 - |
Pregunta
Parece que esto debería ser muy simple, pero soy bastante nuevo en Objective-C.Lo que quiero hacer es simplemente iniciar y detener un control giratorio mientras se carga mi WebView.Esta es una aplicación para OS X.Todo lo que he buscado es Cocoa Touch, estoy usando solo Cocoa.En mi AppDelegate.m tengo métodos que inician y detienen el control giratorio (esto funciona, lo probé).
-(IBAction)goSpin:(id)sender
{
[spinner startAnimation:self];
}
-(IBAction)stopSpin:(id)sender
{
[spinner stopAnimation:self];
}
También tengo los dos métodos delegados para webView, que anulé.
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
{
[self goSpin:self];
}
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
[self stopSpin:self];
}
Básicamente, me gustaría saber cómo consigo que mi webView configure su delegado.Por lo general, tengo que hacer algo en el archivo .h, pero no puedo encontrar ninguna referencia que indique cuál es el delegado de webKit que funcionaría para esto.Cualquier ayuda sería apreciada.
Solución
El
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
y
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
Los métodos son parte del Protocolo WebFrameLoadDelegate.
Vista web tiene un frameLoadDelegate
propiedad.Configúrelo en su WebView
instancia llamando [webView setFrameLoadDelegate:delegate]
, dónde delegate
es un NSObject que implementa los dos métodos (será más fácil para usted hacer self
el frameLoadDelegate aquí).Dado que WebFrameLoadDelegate es un protocolo informal, delegate
debería declarar los dos métodos en su archivo .h, en lugar de agregar <WebFrameLoadDelegate>
a su declaración de clase como si fuera un protocolo formal.
Otros consejos
Puede anular estos métodos de delegado de WebView para iniciar y detener un Spinner.
- (void)webViewDidStartLoad:(UIWebView *)webView{
// In this method you have to start a spinner.
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// In this method you have to stop the current spinner.
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
// In this method you have to stop the current spinner.
}