UIWebView的基本了解
什么是UIWebView
1.UIVebView是系统内置的浏览器控件
2.系统自带的safari浏览器就是用WebView实现的
**注意 : **
1. webView是有缺点的,会导致内存泄露,而且这个问题是它系统本身的问题。
2. 现在的开发并不完全是原生的开发,而更加倾向于原生+Html5的方式
3. webView是OC代码和html代码之间进行交互的桥梁-
WebView能加载的资源
1.能加载远程的网络资源
2.能加载绝大部分的常见文件(如: html\htm , pdf\doc\ppt\txt , MP4等等)
加载MP4文件的示例图片:
- UIWebView的常见属性的设置
//设置网页自动适应(默认是NO)
self.webView.scalesPageToFit = YES;
//设置检测网页中的格式类型,all表示检测所有类型包括超链接、电话号码、地址等
self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
//UIWebView内有一个UIScrollView控件,所以可以滚动,通过设置scrollView,可以设置UIWebView的大小和位置
self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
-
UIWebView常用的加载网页的方法
1.通过加载返回的网址的url创建的请求对象加载
- (void)loadRequest:(NSURLRequest *)request;
2.通过返回的html5的标签数据生成html5字符串,进行加载
- (void)loadHTMLString:(NSString *)string baseURL:(nullable NSURL *)baseURL;
示例代码"
//1.确定url(加载网页)
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
//(加载本地文件)
NSURL *url = [NSURL fileURLWithPath:@"/Users/apple/Desktop/视频/高清视频/课堂问答-上午.mp4"];
//2.创建请求对象
NSURLRequest *request = [NSURLRequest requestWithURL:url];
//3.加载网页
[self.webView loadRequest:request];
-
UIWebView的相关代理方法
设置UIWebView的代理属性
self.webView.delegate = self;
代理方法
1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
NSString *string = request.URL.absoluteString;
if ([string containsString:@"dushu"]) {
return NO;
}
return YES;
}
2.开始加载网页的时候调用
-(void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
}
3.当加载失败或者是错误的时候调用
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"didFailLoadWithError");
}
4.加载完成
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"webViewDidFinishLoad");
self.goback.enabled = self.webView.canGoBack;
self.goforward.enabled = self.webView.canGoForward;
}
-
UIWebView小案例
通过UIVebView模拟Safari的界面,并实现界面的前进,后退,刷新等功能- 实现界面的前进
- (void)goForward;
- 实现界面的前进
[self.webView goForward]; 前进
- 实现界面的后退
- (void)goBack;
[self.webView goBack]; 回退
- 实现界面的刷新
- (void)reload;
[self.webView reload]; 刷新
- 实现界面停止加载
- (void)stopLoading;
[self.webView stopLoading]; 停止加载
- 设置前进,后退,刷新的逻辑显示,
通过代理方法加载完成代理方法和属性实现
当网页加载完成后,WebView自己就已经知道了是否能后退/前进
代理方法:
-(void)webViewDidFinishLoad:(UIWebView *)webView;
属性:
//能后退
@property (nonatomic, readonly, getter=canGoBack) BOOL canGoBack;
//能前进
@property (nonatomic, readonly, getter=canGoForward) BOOL canGoForward;
//能加载
@property (nonatomic, readonly, getter=isLoading) BOOL loading;
代码示例:
//4.加载完成
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
self.goback.enabled = self.webView.canGoBack;
self.goforward.enabled = self.webView.canGoForward;
}
-
拦截webView中的某些请求(或禁止请求包含某些特殊字符串的请求)
通过代理方法实现
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
示例代码 :
//1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
//获取请求中的url,并转换成字符串
NSString *string = request.URL.absoluteString;
if ([string containsString:@"dushu"]) {
return NO;
}
return YES;
}
- 完整小案例
@interface ViewController ()<UIWebViewDelegate>
/***拖拽出storyboard中的看属性***/
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goback;
@property (weak, nonatomic) IBOutlet UIBarButtonItem *goforward;
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end
/\
@implementation ViewController
/***实现点击 后退,前进,刷新 的功能***/
-(IBAction)goBackBtn:(UIBarButtonItem *)sender {
[self.webView goBack];
}
-(IBAction)goforwardBtn:(UIBarButtonItem *)sender {
[self.webView goForward];
}
-(IBAction)loadBtn:(UIBarButtonItem *)sender {
[self.webView reload];
}
/\
/***设置要加载的网页,并加载,设置网页的自适应,设置代理***/
-(void)viewDidLoad {
[super viewDidLoad];
//url
NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
//2.request
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];
//设置自适应网页
self.webView.scalesPageToFit = YES;
//设置代理
self.webView.delegate = self;
}
/\
/***UIWebView的代理方法***/
#pragma mark UIWebViewDelegate
//1.即将加载某个网页(请求) 返回值:YES 可以加载该请求 NO 不加载
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"shouldStartLoadWithRequest--%@",request.URL.absoluteString);
NSString *string = request.URL.absoluteString;
if ([string containsString:@"dushu"]) {
return NO;
}
return YES;
}
//2.开始加载网页的时候调用
-(void)webViewDidStartLoad:(UIWebView *)webView
{
NSLog(@"webViewDidStartLoad");
}
//3.当加载失败或者是错误的时候调用
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
NSLog(@"didFailLoadWithError");
}
//4.加载完成
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSLog(@"webViewDidFinishLoad");
self.goback.enabled = self.webView.canGoBack;
self.goforward.enabled = self.webView.canGoForward;
}