我有一個包含UIWebView並實現UIWebViewDelegate的UIViewController子類。我想要做的是使UIWebView中的鏈接按下在Safari中打開。
我已閱讀過有關此問題,但仍無法使其工作。 這可能是我做了什麼:objective c從safari的UIWebView打開鏈接
在我班上的- (void)viewDidLoad
方法我用下面的代碼:
[[self articleWebView] setDelegate: self];
[articleWebView loadRequest:requestObj];
我不希望顯示在加載整個頁面的html articleWebView對象,所以在-(void)webViewDidFinishLoad:(UIWebView *)webView
方法I使用此:
NSString *content = [articleWebView stringByEvaluatingJavaScriptFromString:@"document.getElementsByClassName('myDivId')[0].outerHTML;"];
然後我空(釋放)articleWebView並加載內容:
[articleWebView release];
articleWebView= [[UIWebView alloc] initWithFrame:CGRectMake(0,0,320,380)];
[articleWebView loadHTMLString:content baseURL:[NSURL URLWithString:@"http://www.mysite.gr/"]];
self.view = articleWebView;
我嘗試使用以下,但它不工作
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL* url = [request URL];
if (UIWebViewNavigationTypeLinkClicked == navigationType)
{
[[UIApplication sharedApplication] openURL:url];
return NO;
}
return YES;
}
任何想法,我缺少的是什麼?
預先感謝您。
編輯:正如我所看到的,shouldStartLoadWithRequest不會被調用,所以我猜我的webView的委託有問題嗎?
感謝名單了很多的答覆。我已經嘗試過,但它給了這個問題:在 - (void)webViewDidStartLoad:(UIWebView *)webView方法我有這個:[activityIndicator startAnimating]; (沒有別的,就這樣)。在 - (void)webViewDidFinishLoad:(UIWebView *)webView方法中,我所做的第一件事是[activityIndicator stopAnimating]; [activityIndicator release]; 當我添加你的解決方案時,我得到這個錯誤和應用程序崩潰:「[UIActivityIndicatorView startAnimating]:消息發送到釋放實例0x4ef10c0」。 你有什麼線索爲什麼?這是我今天整天都在瘋狂... – CrisDeBlonde 2011-05-05 16:30:09
我建議你釋放UIViewController的 - (void)dealloc方法中的activityIndicator,而不是 - (void)webViewDidFinishLoad:(UIWebView *)webView。您收到此錯誤是因爲在articleWebView開始加載第二個URL時,當第一個URL請求被加載時,「ActivityIndicator」已經被釋放。我建議您在 - (void)dealloc方法中釋放活動指示符,並使用[activityIndicator setHidden:YES]或NO來顯示和隱藏活動。 – Jimit 2011-05-05 17:40:48