1

我正在尝试通过 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");
}

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

警告

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

评估

4

1 回答 1

6

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

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

您需要在您的中声明一个实例变量webViewController来保存页面标题的值。然后你会webViewDidFinishLoad:像这样在里面设置它的值:

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

上面的代码假设你命名了你的实例变量webTitle

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

于 2013-07-09T13:26:37.383 回答