将UIWebView页面标题添加为NSString

Mat*_*ift 1 uiwebview nsstring ios

我试图通过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");
}
Run Code Online (Sandbox Code Playgroud)

编辑:我也收到这些警告.

警告

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

评估

Cez*_*zar 6

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

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

您需要在您的声明中声明一个实例变量webViewController来保存页面标题的值.然后你将在里面设置它的值webViewDidFinishLoad:如下:

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

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

如果你已经在你的控制器中有这个实例变量并且在里面错误地重新声明了它webVieDidFinishLoad:,那么只需NSString *从赋值行中删除它.