IOS- UIWebView

1、什么是UIWebView

UIWebView是ios内置的浏览器控件,可以用来直接加载远程的网页资源,也可以加载绝大部分的常见文件htm/html、txt、pdf/keynote、ppt、doc/docx、音视频文件等等,还可以通过调用UIWebView提供的api实现页面的前进、后退、刷新等动作,甚至还可以动态的设置网页内容。

2.简单使用加载网页

     /**
     [UIScreen mainScreen].bounds.size.width    硬件屏幕的宽
     [UIScreen mainScreen].bounds.size.height   硬件屏幕的高
     **/
    //1.创建一个UIWebView
    UIWebView *web = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height)];
    
    //2.要打开的网址
    NSString *openURL = @"https://www.baidu.com/";
    NSURL *URL = [NSURL URLWithString:openURL];
    NSURLRequest *requestURL = [NSURLRequest requestWithURL:URL];
    
    //3。加载内容
    [web loadRequest:requestURL];
    
    [self.view addSubview:web];

模拟机运行效果图:

3.使用导航效果

浏览器一般都会有浏览导航按钮,我们在上一步的基础上加上一个返回按钮。

     /**
     UIWebView类内部会管理浏览器的导航动作,可以通过一下函数控制
     [web goBack];//根据历史返回上一页
     [web goForward];//根据历史前往下一页
     [web reload];//重新加载
     [web stopLoading];//停止加载
     **/
    //4.在导航栏添加一个按钮,这个按钮能返回上一页
    UIBarButtonItem *goBack = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemReply target:self action:@selector(goBack)];

    self.navigationItem.rightBarButtonItem = goBack;
-(void) goBack {
    [web goBack];
}

运行效果图:

4.UIWebView加载本地文件

这里我举例加载一个音频文件,其他格式:png、jpg、gif、txt、docx、视频、html等文件也可如此。

     /**
     第一步:获取要加载的本地文件的路径
     pathForResource:文件名
     ofType:格式名
     **/
    NSString *path = [[NSBundle mainBundle] pathForResource:@"薛之谦-那是你离开了北京的生活" ofType:@"mp3"];
    
    /**
     第二步:根据文件路径获取url
     **/
    NSURL *url = [NSURL fileURLWithPath:path];
    
    /**
     第三步:根据路径加载文件为 NSData
     **/
    NSData *data = [NSData dataWithContentsOfFile:path];
    
    
    /**
     第四步:web 加载本地data
     loadData:要加载的文件的data
     MIMEType:文件的Type名
     textEncodingName:编码格式一般为 @"UTF-8"
     baseURL:要加载文件的url
     **/
    [web loadData:data MIMEType:[self mimeType:url] textEncodingName:@"UTF-8" baseURL:url];
/////根据 url 获取 MIMEType
- (NSString *)mimeType:(NSURL *)url {
    
    //根据 url 得到 NSURLRequest(url请求)
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //初始化一个 NSURLResponse(url响应)
    NSURLResponse *response = nil;
    
    //根据 NSURLRequest 获得 NSURLResponse
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    
    //将 NSURLResponse 中的 MIMEType 返回
    return response.MIMEType;
}

运行效果图:

5.UIWebView加载html文件

5.1.加载后台或网上下载的html字符串

    /**
     如果html文件从后台或网上下载的字符串
     **/
    NSString *html = @"";
    
    NSURL *url  = [NSURL URLWithString:html];
    
    [web loadHTMLString:html baseURL:url];

5.2.加载本地html文件,可以用4.加载本地文件的方法,也可以用uiwebview专门加载html的方法。

    //html的路径
    NSString *htmlpath = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];
    
    NSString *html= [NSString stringWithContentsOfFile:htmlpath encoding:NSUTF8StringEncoding error:nil];
    
    NSURL *url  = [NSURL URLWithString:html];
    
    //加载html
    //baseURL:指导UIWebView对象如何跟随链接和加载远程资源
    [web loadHTMLString:html baseURL:url];

运行效果图:

6. UIWebView的代理函数

/**
 webView的最重要的代理函数,用来监听、拦截url的跳转或点击 
 **/
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    
    //获取每次跳转的url
    NSString *url = [request.URL absoluteString];
    
    //然后可以将监听的 url 和特定的网址进行对比:拦截动作
    if ([url isEqualToString:@""]) {
        //TODO YOU WANT TODO
        return NO;//return NO 就不会继续跳转下去
    }
    
    return YES;//return YES 就会继续跳转下去
}

 

UIWebView使用注意事项(坑点)

  • 释放UIWebView对象之前首先要将其delegate设置为nil,否则可能会出现异常crash等问题,一般在dealloc方法中处理;

  • UIWebView对象不应该被添加到UIScrollView对像的视图上,否则可能会出现无法预料的问题,因为系统无法正确处理两个视图的点击、滚动、手势操作等事件;

  • 加载本地html文件时,确保使用loadHTMLString:baseURL:方法,不要使用loadRequest:方法;

  • UIWebView的stringByEvaluatingJavaScriptFromString:方法为同步执行,当前线程将等待该方法执行完成,因此调用该方法将会导致app出现挂起现象;

猜你喜欢

转载自blog.csdn.net/qq_36557133/article/details/81106482