我在Webview中打開一個URL,同時加載我在一個警報視圖中顯示一個微調。檢測URL的webview已經離開你的iPhone應用程序
如果點擊網址打開一個內部應用程序,如iTunes如何檢測Web視圖已離開我的應用程序,以便當用戶返回對話框已被解僱。
我已經使用didFailLoadWithError,這不起作用?
任何想法?
謝謝丹
修復 - 我忘了設置代表Doh!
我在Webview中打開一個URL,同時加載我在一個警報視圖中顯示一個微調。檢測URL的webview已經離開你的iPhone應用程序
如果點擊網址打開一個內部應用程序,如iTunes如何檢測Web視圖已離開我的應用程序,以便當用戶返回對話框已被解僱。
我已經使用didFailLoadWithError,這不起作用?
任何想法?
謝謝丹
修復 - 我忘了設置代表Doh!
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;
}
首先,使用警報視圖在Web視圖中顯示加載進度可能是一個壞主意,因爲它會阻止所有用戶交互,直到加載完成。
您已經有了允許web視圖處理某些帶有內置應用程序的URL的代碼,比如iTunes(它本身不這麼做),所以我猜想當您使用[[UIApplication sharedApplication] openURL:...]
來打開外部URL,你也可以很容易地隱藏微調器。
是的公平點。但我不會沒有網址,直到它加載,所以我不能處理。呃...也許我需要重新解決這個問題。謝謝。 – Dan
您可以使用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];
謝謝,我發現web視圖委託處理這個。我只是沒有把它掛起來。 – Dan
當您找到我們問題的答案時,您應該將其作爲答案發布,並接受您自己的答案以將問題標記爲已回答並提高您的接受率。 –