2013-04-14 40 views
2

我目前有一個簡單的HTML文件加載在一個UIWebView與一堆鏈接嵌入文件的文本中。我想知道是否有辦法在UIPopover中打開這些鏈接。如何使UIWebView鏈接在UIPopover中打開?

這些鏈接指向另一個HTML文件,因此我希望它們在UIWebView內部加載一個UIPopover。

讓我知道如果我沒有足夠清楚我所尋找的。

回答

3

你應該看看UIWebViewDelegate

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

的這種方法這將調用每當用戶觸發鏈接

所以使其中包含一個UIWebView成的WebView委託的viewController,並實現此方法。

如果有BOOL返回值。如果你返回「NO」,webview本身不會嘗試處理鏈接,所以你可以控制它。

(NSURLRequest *)request爲您提供了實際的鏈接...

所以從這裏可以觸發與內容的viewController ...可以包含一個UIWebView,您可以在其中加載鏈接數據UIPopover。

(逗你應該問的問題只是這一刻,我在執行類似的東西現在..)

更新

正如你注意到沒有,有在這裏觀察微妙。當你的UIWebView第一次加載它的內容時(例如在viewDidLoad上),這個委託方法將被調用。如果在此條件下返回NO,則不會加載初始內容,並且您將擁有一個神祕空白的webView。

要解決這個問題,您需要考慮navigationType參數。基本上你只想返回'NO',如果navigationType是UIWebViewNavigationTypeLinkClicked(你激活一個鏈接)。否則,你想返回YES(webView應該加載它的內容)。

所以,一個完整的實施方法可能是這樣的

-    (BOOL)webView:(UIWebView *)webView 
    shouldStartLoadWithRequest:(NSURLRequest *)request 
       navigationType:(UIWebViewNavigationType)navigationType 
{ 
    BOOL result = YES; 
    if (navigationType=UIWebViewNavigationTypeLinkClicked){ 
     [self launchPopOverWithRequest:request] 
     result = NO; 
    } 
    return result; 
} 
+0

我有一個快速的問題。這可能是我錯過的一些愚蠢的東西,但是當我返回NO時,我已經加載到UIWebView中的HTML文件不再顯示。我應該在不同的地方加載HTML文件嗎?我目前正在將它加載到當前View Controller的ViewController.m的viewDidLoad函數中。 – INsanEWay

+0

@INsanEWay - 查看我的更新... – foundry

相關問題