2010-09-06 43 views
2

我的應用程序的功能內容(出於文本格式原因)在UIWebView中呈現。內容中有鏈接,其中一些應該在移動版Safari中打開目標,而另一些應該在內容中導航。UIWebView:在Safari中打開一些鏈接,其中一些在視圖中

到目前爲止,我已經使用UIWebView委託捕獲鏈接請求。我在執行的

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 

我會檢查使用lastPathComponentpathComponents已知元素的請求URL,以確定是否打開鏈接外部或視圖中。

但是,我剛剛發現上述方法僅適用於iOS 4.0,這會導致應用在iPad上無用。另外我有這種感覺,我在這裏使用一個骯髒的解決方案。

是否有另一種方式來以某種方式「標記」我內容中的鏈接,以便在委託方法中處理請求時以後輕鬆區分它們?

非常感謝!

回答

1

您應該設置Web視圖的政策代表: 例如控制器,包含一個Web視圖

[webView setPolicyDelegate:self]; 

,然後覆蓋一個decidePolicyForNavigation方法(這只是一個例子):

- (void)webView:(WebView *)sender decidePolicyForNavigationAction: (NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener 
{  
    if ([[actionInformation objectForKey:WebActionNavigationTypeKey] intValue] == WebNavigationTypeLinkClicked) { 
     [listener ignore]; 
     [[NSWorkspace sharedWorkspace] openURL:[request URL]]; 
    } 
    else 
     [listener use]; 
} 

你可以區分那種鏈接並忽略或使用監聽器。如果你忽略它,你可以打開safari中的鏈接,如果你使用它,鏈接將在你的web視圖中打開。

HTH

+0

在我看來,這隻適用於mac,不適用於iphone ... – Toastor 2010-09-06 15:20:59

+0

用UIApplication sharedApplication替換NSWorkspace位。 UIApplication有一個openURL方法:哭泣。檢查UIApplication標頭。 – 2010-09-06 16:16:52

+0

對不起,這個例子來自mac應用程序,使用sharedApplication的openURL作爲Chris Parker寫的 – 2010-09-06 17:20:16

相關問題