0

webViewDidFinishLoad デリゲート メソッド内にいくつかのコードがあり、コードのまったく別の部分で別のメソッド内からこのコードの実行が終了したことを伝える何らかの方法が必要です。これは可能ですか?基本的に私がやりたいことは次のようなものです:

-(void) myMethod
{
    // do stuff that causes webViewDidFinishLoad to be called

    if (webViewDidFinishLoad has finished executing)
    {
        // do stuff with outputString
    }
}

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    outputString = [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"myJSFunction('%@')",jsInputString]]; 
}

私はすでにこの回答を見ましたが、意味がありませんでした。

これを myMethod 内に追加する必要があります。webViewDidFinishLoad が 1 回だけ呼び出されることを確認できます。

4

6 に答える 6

2

WebView の読み込みが完了したかどうかを示すブール値をいつでも設定できます。また、ブール値の値は webview デリゲート メソッドで変更されます。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    loadFinished = YES;
}

次に、独自のメソッドで、「loadFinished」がタスクを実行することを確認します。<UIWebViewDelegate>このデリゲート メソッドを使用するには、インターフェイスを設定する必要があります

于 2012-09-11T09:10:37.230 に答える
1

他のメソッドでデリゲートと通知を待たないようにしてください。それらがクラスにコールバックするときに、それらに依存する作業を行います。myMethodデリゲート メッセージを受け取るまで、電話しないでください。がユーザー入力から呼び出された場合myMethodは、Web ビューが読み込まれるまで関連するコントロールを無効にします。

于 2012-09-11T12:49:23.493 に答える
0

webViewDidFinishLoadで、「myMethod」コード部分に通知を投稿します。このようなもの:

UIWebViewの場合:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [[NSNotificationCenter defaultCenter] postNotificationName:@"webview_finished" object:self userInfo:nil];
}

「myMethod」コード部分:

- (void)viewDidLoad
{
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myMethod) name:@"webview_finished" object:nil];
}
于 2012-09-11T09:14:56.833 に答える
0

GCDを試してみませんか?

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

    // WebView load content here 

    dispatch_async( dispatch_get_main_queue(), ^{

       // load myMethod

    });
});
于 2012-09-11T09:11:39.173 に答える
0
  • UIWebViewのiVarを使用できますloading
  • 独自の共有ブール値フラグを iVar として使用して、webViewDidFinishLoad.

ただし、設計を再考しwebViewDidFinishLoadて、ロードが完了した後に何をすべきかを検討することもできます。

于 2012-09-11T09:06:26.260 に答える
0

ブール値を使用し、その値をYESの最後の行で に設定しますwebViewDidFinishLoad

myMethod次に、次のよう にチェックインします。

-(void) myMethod
{
    // do stuff that causes webViewDidFinishLoad to be called

  if (yourBoolean == YES)
  {
      // do more stuff
  }
}  

それはあなたの仕事をするはずです。

于 2012-09-11T09:11:43.257 に答える