当 UIWebView 没有互联网连接时实现 UIAlertView
Posted
技术标签:
【中文标题】当 UIWebView 没有互联网连接时实现 UIAlertView【英文标题】:Implement a UIAlertView when a UIWebView does not have an internet connection 【发布时间】:2014-06-09 04:33:55 【问题描述】:我正在使用一些 UIWebViews 创建一个相当简单的基于选项卡的应用程序。为了通过 App Store Approval,如果没有网络连接,我需要实现一个错误。我是初学者,但我试过了,但什么也没发生。
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Can't connect. Please check your internet Connection"
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
我尝试过 Reachability,但它很复杂,我不确定如何将它实现到 UIAlertView 中。这段代码可以通过调整工作还是垃圾?
【问题讨论】:
在页面加载时关闭网络,它会显示警报.. 或者先关掉网络再运行你的App.. 我已经这样做了,广告不会加载任何警报。 webView:didFailLoadWithError: 的超时时间相当高,我相信大约是一分钟左右。你等了那么久吗? developer.apple.com/Library/ios/samplecode/Reachability/… 下载这段代码.. 运行看看它是如何工作的 【参考方案1】:我建议你使用delegate methods of webView
并在 ViewController 中实现它。
webView的委托方法主要有3种。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
- (void)webViewDidFinishLoad:(UIWebView *)webView
在 didFailLoadWithError 方法中,您可以使用 [错误代码] 来识别错误代码。您可以根据自己的要求使用其中任何一种。
// Error codes for CFURLConnection and CFURLProtocol
kCFURLErrorUnknown = -998,
kCFURLErrorCancelled = -999,
kCFURLErrorBadURL = -1000,
kCFURLErrorTimedOut = -1001,
kCFURLErrorUnsupportedURL = -1002,
kCFURLErrorCannotFindHost = -1003,
kCFURLErrorCannotConnectToHost = -1004,
kCFURLErrorNetworkConnectionLost = -1005,
kCFURLErrorDNSLookupFailed = -1006,
kCFURLErrorHTTPTooManyRedirects = -1007,
kCFURLErrorResourceUnavailable = -1008,
kCFURLErrorNotConnectedToInternet = -1009,
这些错误代码在 CFNetworkError.h 中可用。在我的应用程序中我使用过这种方式。
if ([error code] == kCFURLErrorNotConnectedToInternet)
// if we can identify the error, we can present a more precise message to the user.
UIAlertView *alertView=[[[UIAlertView alloc] initWithTitle:APP_NAME message:@"Sorry, there doesn’t seem to be an internet connection." delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]autorelease];
[alertView show];
这对我来说很好。
【讨论】:
感谢您提供此代码列表;它将帮助我解决我想在这里采取的方法。非常感谢!【参考方案2】:您为 UIWebView 分配委托的视图控制器; (在您设置 webview.delegate=self 的 viewcontroller 代码中),您需要将头文件 (.h) 提交给 UIWebViewDelegate 协议。只有你的方法:
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
将被触发。我猜你错过了这个,否则你的过程是正确的。 因此,将 UIWebViewDelegate 添加到您的 .h 文件中。
希望这会有所帮助。
【讨论】:
【参考方案3】:您可以使用 ViewDidLoad 或 ViewWillAppear 的可达性代码检查网络连接。使用下面的链接下载它们
https://github.com/tonymillion/Reachability
Reachability *reach = [Reachability reachabilityForInternetConnection];
NetworkStatus netStatus = [reach currentReachabilityStatus];
if (netStatus != NotReachable)
NSLog(@"Async.....Network is Available");
else
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Network Error" message:@"No Network Available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil , nil];
[alertView show];
或者您可以在 UIWebView 的委托方法下面发出警报
(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error希望对您有所帮助...!
【讨论】:
这在它只是一个 WebView 时有效,但当 WebView 在 Tab 中时它不起作用。 它会工作的...只需将上面的代码放在您加载 webview 的视图控制器的 ViewWillAppear 中......! 我试过了:-(void)viewWillAppear:(BOOL)animated Reachability *reach... 等等,但是没有用...以上是关于当 UIWebView 没有互联网连接时实现 UIAlertView的主要内容,如果未能解决你的问题,请参考以下文章
iPhone - UIWebView 在没有数据连接的情况下不调用 didFailLoadWithError