2013-03-16 37 views
1

我試圖通過javascipt的獲得加載的網頁的標題和地點,作爲一個UIActionSheet的標題像這樣:搶UIWebView的頁面標題爲NSString的

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

+0

如果您嘗試在您的javascript字符串中提醒標題,會發生什麼? – 2013-03-16 19:43:00

+0

提醒標題? – 2013-03-16 19:49:41

+1

是的,所以不是評估JavaScript字符串'document.title',而是評估'alert(document.title)'。 – 2013-03-16 19:50:41

回答

6

既然你聲明的webTitlewebViewDidFinishLoad:它是一個局部變量,你給它分配任何值僅在此特定方法的範圍內有效。

由於您想在webViewDidFinishLoad:範圍之外使用webTitle,因此在showActionSheet:之內,您需要一個對兩種方法都可見的變量。

您需要在webViewController中聲明一個實例變量來保存頁面標題的值。然後,你將其值設置裏面webViewDidFinishLoad:這樣的:

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

上面的代碼假設你命名你的實例變量webTitle

如果你已經在你的控制器有這樣的實例變量,並錯誤地重新聲明這裏面webVieDidFinishLoad: ,只需從作業行中刪除NSString *即可。