WebKitのデリゲートを正しく使用してスピナー、OS X、OBJ-Cを開始および停止する方法
-
12-12-2019 - |
質問
このようなようですが、このようなシンプルなので、客観的なものではかなり新しいです。私がやりたいことは、WebViewがロードされている間だけスピナーを起動してスピナーを停止します。これはOS Xアプリです。私が検索したことはすべてCocoa Touchのためのものです、私はちょうどココアを使っています。My AppDelegate.Mでは、スピナーを起動して停止するメソッドが必要です(これは機能します、私はそれをテストしました)。
-(IBAction)goSpin:(id)sender
{
[spinner startAnimation:self];
}
-(IBAction)stopSpin:(id)sender
{
[spinner stopAnimation:self];
}
.
I WebViewには2つのデリゲートメソッドがあります。
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
{
[self goSpin:self];
}
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
{
[self stopSpin:self];
}
.
基本的に、私はそれを代表者に設定するために私のWebViewを手に入れる方法を知りたいです。通常は.hファイルで何かをしなければなりませんが、WebKitの委任がこれに取り組むものであることをリストする参照は見つかりません。どんな助けにも感謝されるでしょう。
解決
-(void)webView:(WebView *)sender didStartProvisionalLoadForFrame:(WebFrame *)frame
.
と
-(void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame
.
メソッドは WebFrameLoadDelegateプロトコル。
webview frameLoadDelegate
プロパティを持ちます。WebView
を呼び出して、[webView setFrameLoadDelegate:delegate]
を呼び出します。ここで、delegate
は2つのメソッドを実装するNSObjectである(ここでは、FrameLoadDelegateを作成するのが最も簡単になる)。WebFrameLoadDelegateは非公式のプロトコルであるため、self
は、正式なプロトコルと同様に、そのクラス宣言にadd delegate
を追加するのではなく、その2つのメソッドを宣言する必要があります。
他のヒント
これらのWebViewの委任メソッドを上書きしてスピナーを起動して停止できます。
- (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.
}
.