1

JavaScipt を介してロードされた Web ページのタイトルを取得し、それを UIActionSheet のタイトルとして配置しようとしています。

UIアクションシート

現在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 に答える