UIWebView和UIActivityIndicatorView的结合使用
环境:Xcode6.1
UIWebView是iOS开发中常用的一个控件,是内置的浏览器控件,我们可以用它来浏览网页,加载文档等。这篇文件将结合UIActivityIndicatorView控件制作一个小实例(加载apple的官网)。效果如下:
一.建立一个SingleView工程
二.初始化界面
ViewController.h文件
1 #import <UIKit/UIKit.h> 2 3 @interface ViewController : UIViewController 4 5 @property (nonatomic,strong) UIActivityIndicatorView *activityIndicatorView; 6 @property (nonatomic,strong) UIWebView *webView; 7 8 @end
ViewController.m文件中,先写一个初始化UI的方法
1 - (void)stepUI { 2 self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 3 [self.view addSubview:self.webView]; 4 5 self.activityIndicatorView = [[UIActivityIndicatorView alloc] init]; 6 self.activityIndicatorView.center = self.view.center; 7 self.activityIndicatorView.bounds = CGRectMake(0, 0, 50, 50); 8 self.activityIndicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 9 [self.webView addSubview:self.activityIndicatorView]; 10 }
在ViewDidLoad方法中加载初始化UI的方法和处理UIWebView要加载的内容,并设置代理
1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 [self stepUI]; 4 5 self.webView.delegate = self; 6 NSString *str = [NSString stringWithFormat:@"http://www.apple.com/"]; 7 NSURL *url = [NSURL URLWithString:str]; 8 NSURLRequest *request = [NSURLRequest requestWithURL:url]; 9 [self.webView loadRequest:request]; 10 }
三.通过UIWebView的代理方法,处理UIActivityIndicatorView的显示
让ViewController遵守UIWebViewDelegate协议
UIWebViewDelegate有下面的几个方法:
- (void)webViewDidStartLoad:(UIWebView *)webView;开始加载的时候执行
- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加载出错的时候执行
UIActivityIndicatorView控件有如下的两个方法:
- (void)startAnimating;
- (void)stopAnimating;
1 #pragma mark ---web view delegate 2 - (void)webViewDidStartLoad:(UIWebView *)webView { 3 [self.activityIndicatorView startAnimating]; 4 } 5 - (void)webViewDidFinishLoad:(UIWebView *)webView { 6 [self.activityIndicatorView stopAnimating]; 7 } 8 - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { 9 NSLog(@"%@",error); 10 }
对于加载时的出错,楼主只是简单的进行打印
最后,在模拟器上运行即可。
错误总结:
1.最开始写URL时没有写协议http,只是简单的www.apple.com,导致加载失败。
2.设置UIActivityIndicatorView控件的显示样式时,没有考虑到UIWebView的加载页面为白色,还傻兮兮的设置为
self.activityIndicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
导致加载时没有看到显示效果,花了许久的时间才发现问题。所以写代码前一定要思维严谨,多做合理性的考虑。