Como usar corretamente o delegado do webkit para iniciar e parar um spinner, OS X, OBJ-C
-
12-12-2019 - |
Pergunta
Parece que isso deveria ser muito simples, mas sou muito novo no Objective-C.O que eu quero fazer é simplesmente iniciar e parar um botão giratório enquanto meu WebView está carregando.Este é um aplicativo OS X.Tudo que procurei é por Cocoa Touch, estou usando apenas Cocoa.No meu AppDelegate.m eu tenho métodos que iniciam e param o spinner (Isso funciona, eu testei).
-(IBAction)goSpin:(id)sender
{
[spinner startAnimation:self];
}
-(IBAction)stopSpin:(id)sender
{
[spinner stopAnimation:self];
}
Também tenho os dois métodos delegados para webView, que substituí.
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
{
[self goSpin:self];
}
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
[self stopSpin:self];
}
Basicamente, gostaria de saber como faço para que meu webView defina seu delegado.Normalmente tenho que fazer algo no arquivo .h, mas não consigo encontrar nenhuma referência que liste qual é o delegado do webKit que funcionaria para isso.Qualquer ajuda seria apreciada.
Solução
O
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
e
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
métodos fazem parte do Protocolo WebFrameLoadDelegate.
Visualização da Web tem um frameLoadDelegate
propriedade.Coloque-o no seu WebView
instância chamando [webView setFrameLoadDelegate:delegate]
, onde delegate
é um NSObject que implementa os dois métodos (será mais fácil para você fazer self
o frameLoadDelegate aqui).Como WebFrameLoadDelegate é um protocolo informal, delegate
deve declarar os dois métodos em seu arquivo .h, em vez de adicionar <WebFrameLoadDelegate>
à sua declaração de classe como com um protocolo formal.
Outras dicas
Você pode substituir esses métodos delegados de webview para iniciar e parar um controle giratório.
- (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.
}