1

次のコードは、UIWebView に読み込まれたページのタイトルを取得し、タイトルに「テーブル」という単語が含まれているかどうかを確認します。その場合、ツールバーが再表示されます。そうでない場合は、ツールバーを非表示にします。これは、最初はタイトルに「表」のないページがロードされたときに正常に機能し、タイトルに「表」が含まれているページを参照すると、ツールバーが表示されます。この問題は、タイトルに「テーブル」が含まれていないページに戻ると発生し、新しいタイトルが NSLog に表示されますが、ツールバーは消えません。

NSString * webtitle = [viewWeb stringByEvaluatingJavaScriptFromString:@"document.title"];
NSLog(@"Title is: %@", webtitle);
if ([webtitle rangeOfString:@"Table"].location == NSNotFound) {
    [toolbar setHidden:YES];
} else {
    [toolbar setHidden:NO];
}

どんな助けでも大歓迎です。

ありがとう!

編集:私はこれを実行していると言うべきでした

  - (void)webViewDidFinishLoad:(UIWebView *)wv
  {
  }

編集 2: if が実行されたときに起動するように NSLogs を追加しました。

if ([webtitle rangeOfString:@"Table"].location == NSNotFound) {
    NSLog(@"Hidden");
    [toolbar setHidden:YES];
} else {
    NSLog(@"Not Hidden");
    [toolbar setHidden:NO];
}

「テーブル」のないページを参照すると「非表示」が返されますが、ツールバーは表示されているため、見た目はそのままです [toolbar setHidden:YES]; 何らかの理由で機能していません。誰にも手がかりはありますか?

4

2 に答える 2

1

多くの人が期待していることとは反対webViewDidFinishLoad:に、ページが実際に読み込まれる前に何度か呼び出されることがあります。実際には、Webビューがフレームのロードを終了するたびに呼び出されます。ドキュメントから:

webViewDidFinishLoad:
Sent after a web view finishes loading a frame.

そうは言っても、ブレークポイントを使用してデバッグしてみてください。行に1つのブレークポイントを追加し[toolbar setHidden:YES];、別のブレークポイントを追加し[toolbar setHidden:NO];て、最後に呼び出されているブレークポイントを特定します。2つ目かもしれないと思います。

于 2013-03-20T12:57:52.440 に答える
0

WebView 内をナビゲートしているのか、View Controller 内をナビゲートしているのかわかりません。

ビューコントローラー内をナビゲートしている場合は、そのタイトルロジックを確認することもできます

 -(void)viewWillAppear {
 }

また

 -(void)viewDidAppear {
 }

ページに戻ったとき

Web ビュー内を移動している場合 (リンクをクリックするなど)、UIWebView をサブクラス化し、次のメソッドをオーバーライドして、タイトルを確認する必要がある場合があります。

 -(void)goBack {
     [super goBack];
      //perform check here
 }

 -(void)goForward {
 }

それが役立つことを願っています

于 2013-03-20T12:09:30.083 に答える