我目前有一個簡單的HTML文件加載在一個UIWebView與一堆鏈接嵌入文件的文本中。我想知道是否有辦法在UIPopover中打開這些鏈接。如何使UIWebView鏈接在UIPopover中打開?
這些鏈接指向另一個HTML文件,因此我希望它們在UIWebView內部加載一個UIPopover。
讓我知道如果我沒有足夠清楚我所尋找的。
我目前有一個簡單的HTML文件加載在一個UIWebView與一堆鏈接嵌入文件的文本中。我想知道是否有辦法在UIPopover中打開這些鏈接。如何使UIWebView鏈接在UIPopover中打開?
這些鏈接指向另一個HTML文件,因此我希望它們在UIWebView內部加載一個UIPopover。
讓我知道如果我沒有足夠清楚我所尋找的。
你應該看看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;
}
我有一個快速的問題。這可能是我錯過的一些愚蠢的東西,但是當我返回NO時,我已經加載到UIWebView中的HTML文件不再顯示。我應該在不同的地方加載HTML文件嗎?我目前正在將它加載到當前View Controller的ViewController.m的viewDidLoad函數中。 – INsanEWay
@INsanEWay - 查看我的更新... – foundry