1

好的,下面的代码获取加载到 UIWebView 中的页面的标题,然后检查标题是否包含单词“table”。如果是,则它会取消隐藏工具栏。如果没有,则隐藏工具栏。这首先在标题中没有“表格”的页面加载时工作正常,当您浏览到标题中确实有“表格”的页面时,它会显示工具栏。当您返回标题中没有“表格”的页面时会出现问题,新标题出现在 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:我现在添加了 NSLogs 以在 if 运行时触发:

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:在页面实际完成加载之前可能会被调用多次。实际上,每次 webview 完成加载帧时都会调用它。从文档中:

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

话虽如此,请尝试使用断点进行调试。将一个断点添加到该[toolbar setHidden:YES];行并添加另一个断点,[toolbar setHidden:NO];然后找出最后调用的断点。我猜这可能是第二个。

于 2013-03-20T12:57:52.440 回答
0

我不确定您是在 webview 中还是在视图控制器中导航。

如果您在视图控制器中导航,那么您还可以在

 -(void)viewWillAppear {
 }

或者

 -(void)viewDidAppear {
 }

当您返回页面时

如果您在 Web 视图中导航 - 单击链接等,您可能需要子类化 UIWebView 并覆盖以下方法并检查其中的标题:

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

 -(void)goForward {
 }

希望有帮助

于 2013-03-20T12:09:30.083 回答