将UIWebView页面标题添加为NSString

时间:2013-03-16 19:35:55

标签: ios uiwebview nsstring

我正在尝试通过JavaScipt获取已加载网页的标题,并将其作为UIActionSheet的标题放置:

UIActionSheet

我目前在 ViewController.m 中的内容:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    NSString *webTitle = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}

- (IBAction)showActionSheet:(id)sender {
    // webTitle.text receives errors
    UIActionSheet *actionsheet = [[UIActionSheet alloc]initWithTitle:webTitle delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"Share...", @"Bookmarks", @"Read Later", @"Add to Bookmarks", @"Settings", nil];
    actionsheet.actionSheetStyle = UIBarStyleBlackTranslucent;
    [actionsheet showInView:self.view];
    NSLog(@"Action Menu opened");
}
编辑:我也收到这些警告。

Warnings

EDIT2:通过javascript警报评估代码工作正常。

Evaluation

1 个答案:

答案 0 :(得分:6)

由于您在webTitle内声明了webViewDidFinishLoad:,因此它是一个局部变量,您指定的任何值仅在此特定方法的范围内有效。

由于您要在webTitle范围之外使用webViewDidFinishLoad:,在showActionSheet:内,您需要一个对两种方法都可见的变量。

您需要在webViewController中声明一个实例变量来保存页面标题的值。然后,您将在webViewDidFinishLoad:内设置其值,如下所示:

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    webTitle = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}

上面的代码假定您将实例变量命名为webTitle

如果您的控制器中已经有此实例变量并且在webVieDidFinishLoad:内错误地重新声明了该变量,请从分配行中删除NSString *