我正在尝试通过JavaScipt获取已加载网页的标题,并将其作为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");
}
编辑:我也收到这些警告。
EDIT2:通过javascript警报评估代码工作正常。
答案 0 :(得分:6)
由于您在webTitle
内声明了webViewDidFinishLoad:
,因此它是一个局部变量,您指定的任何值仅在此特定方法的范围内有效。
由于您要在webTitle
范围之外使用webViewDidFinishLoad:
,在showActionSheet:
内,您需要一个对两种方法都可见的变量。
您需要在webViewController
中声明一个实例变量来保存页面标题的值。然后,您将在webViewDidFinishLoad:
内设置其值,如下所示:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
webTitle = [webView stringByEvaluatingJavaScriptFromString:@"document.title"];
}
上面的代码假定您将实例变量命名为webTitle
如果您的控制器中已经有此实例变量并且在webVieDidFinishLoad:
内错误地重新声明了该变量,请从分配行中删除NSString *
。