iOS获取UIWebView标题并检查它是否包含字符串,但if仅出现一次

时间:2013-03-20 11:34:40

标签: ios objective-c xcode uiwebview uiwebviewdelegate

好的,所以下面的代码获取在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];由于某种原因不起作用。有没有人有任何线索?

2 个答案:

答案 0 :(得分:1)

与许多人的期望相反,在页面实际加载之前可能会多次调用webViewDidFinishLoad:。实际上,每次webview完成加载帧时都会调用它。来自documentation

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

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

答案 1 :(得分:0)

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

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

中检查该标题逻辑
 -(void)viewWillAppear {
 }

 -(void)viewDidAppear {
 }

当您返回页面时

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

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

 -(void)goForward {
 }

希望有所帮助

相关问题