我在Webview中打开一个URL,在加载时我在一个警报视图中显示一个微调器。
如果点击的网址打开内部应用程序(如iTunes),我如何检测到网页视图已离开我的应用程序,以便在用户返回对话框时已被解除。
我使用过didFailLoadWithError,这不起作用?
有什么想法吗?
谢谢你
固定 - 我忘了设置代表Doh!
答案 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;
}