2011-08-09 43 views
-1

我在Webview中打開一個URL,同時加載我在一個警報視圖中顯示一個微調。檢測URL的webview已經離開你的iPhone應用程序

如果點擊網址打開一個內部應用程序,如iTunes如何檢測Web視圖已離開我的應用程序,以便當用戶返回對話框已被解僱。

我已經使用didFailLoadWithError,這不起作用?

任何想法?

謝謝丹

修復 - 我忘了設置代表Doh!

+0

當您找到我們問題的答案時,您應該將其作爲答案發布,並接受您自己的答案以將問題標記爲已回答並提高您的接受率。 –

回答

1

UIWebViewDelegate方法webView:shouldStartLoadWithRequest:navigationType:會問你的WebView委託是否被允許嘗試打開它之前打開每一個網址。您可以在該方法中檢查url類型,如果不是http或https,則返回NO,然後爲用戶提供警報,並讓他們選擇是要打開它還是保留在您的應用程序中,或者只是將該應用程序記錄到左側打開另一個並返回YES;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSString *urlString = [NSString stringWithFormat:@"%@", request.URL]; 
    NSArray *urlComponents = [urlString componentsSeparatedByString:@"://"]; 
    NSString *urlType = [urlComponents objectAtIndex:0]; 
    if ([urlType isEqualToString:@"http"] || [urlType isEqualToString:@"https"]) { 
     // present an alert or do whatever you want with this url... 
     return NO; 
    } 
    return YES; 
} 
1

首先,使用警報視圖在Web視圖中顯示加載進度可能是一個壞主意,因爲它會阻止所有用戶交互,直到加載完成。

您已經有了允許web視圖處理某些帶有內置應用程序的URL的代碼,比如iTunes(它本身不這麼做),所以我猜想當您使用[[UIApplication sharedApplication] openURL:...]來打開外部URL,你也可以很容易地隱藏微調器。

+0

是的公平點。但我不會沒有網址,直到它加載,所以我不能處理。呃...也許我需要重新解決這個問題。謝謝。 – Dan

1

您可以使用applicationWillResignActive來檢測應用何時進入非活動狀態。它在你的應用程序代理:

- (void)applicationWillResignActive:(UIApplication *)application { 
    //close your UIWebView here 
} 

如果你不能從委託訪問您的UIWebView,你可以從你的UIViewController的UIApplicationDidEnterBackgroundNotification註冊通知。確保你在某個時候取消註冊。

//register 
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(closeWebView) name:UIApplicationDidEnterBackgroundNotification object:nil]; 

//un-register 
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; 
+0

謝謝,我發現web視圖委託處理這個。我只是沒有把它掛起來。 – Dan

相關問題