检测到URL webview已离开您的iPhone应用程序

时间:2011-08-09 20:34:58

标签: ios url uiwebview

我在Webview中打开一个URL,在加载时我在一个警报视图中显示一个微调器。

如果点击的网址打开内部应用程序(如iTunes),我如何检测到网页视图已离开我的应用程序,以便在用户返回对话框时已被解除。

我使用过didFailLoadWithError,这不起作用?

有什么想法吗?

谢谢你

固定 - 我忘了设置代表Doh!

3 个答案:

答案 0 :(得分:1)

首先,使用警报视图在Web视图中显示加载进度可能不是一个好主意,因为它会阻止所有用户交互,直到完成加载。

您已经拥有允许Web视图使用内置应用程序处理某些URL的代码,例如iTunes(它本身不会这样做),所以当您使用[[UIApplication sharedApplication] openURL:...]时打开外部URL,你也可以轻松地隐藏微调器。

答案 1 :(得分:1)

您可以使用applicationWillResignActive来检测应用进入非活动状态的时间。它会进入你的app委托:

- (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];

答案 2 :(得分: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;
}