前言

	NS_CLASS_AVAILABLE_IOS(2_0) __TVOS_PROHIBITED @interface UIWebView : UIView <NSCoding,
UIScrollViewDelegate>
@available(iOS 2.0, *) public class UIWebView : UIView, NSCoding, UIScrollViewDelegate
  • UIWebView 控件是做网络应用开发时使用的最多的一个控件,它实现了内置的浏览器(类似于 Safari),并且 UIWebView 继承自 UIView,可以将其像其它控件一样应用到需要的位置。

  • 优点:简单,快速。

  • 缺点:内存消耗大,对于手机端的硬件支持不够好,例如:定位,捏合(传统互联网只有点击动作)。

  • 应用场景:

    1. 适合于内容版式变化比较大的应用。

      网易新闻,各种图文混排,甚至嵌入视频。

      菜谱,各种图片搭配,图文并茂。

      运动类的应用:羽毛球,后场高远球,来一段视频,图解说明,分解动作...。

    2. 有些公司,有网站,没有 iOS 应用,着急上架,可以先用 webView 快速包装一个。

      百度的一系列应用,去年年初才慢慢的转成 iOS 应用。

    3. iPhone 手机的浏览器 Safari 就是用 UIWebView 控件开发的。

      微信内嵌的浏览器就是 UIWebView 控件

  • iOS 9+ 中若要加载 http: 网络,需要在 Info.plist 中添加 App Transport Security Settings -> key: Allow Arbitrary Loads,value: YES。

1、UIWebView 的创建

  • Objective-C

    	UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20)];
    
    	// 将 webView 添加到屏幕
    [self.view addSubview:webView]; // 加载网络地址
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 适配屏幕
    webView.scalesPageToFit = YES;
  • Swift

    	let webView:UIWebView = UIWebView(frame: CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height-20))
    
    	// 将 webView 添加到屏幕
    self.view.addSubview(webView) // 加载网络地址
    webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 适配屏幕
    webView.scalesPageToFit = true

2、UIWebView 的设置

  • Objective-C

    	// 加载指定 URL 所设定的内容
    /*
    异步加载,可以从服务器和本地读取
    */ // 加载网络数据
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]]; // 加载本地文件
    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu"
    ofType:@"pdf"]]]]; // 加载 HTML 字符串数据
    /*
    指定 baseURL 可加载图片
    */ // 加载网络 HTML 字符串数据
    NSString *htmlString1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"https://m.baidu.com/"]
    encoding:NSUTF8StringEncoding
    error:NULL];
    [webView loadHTMLString:htmlString1 baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 加载本地 HTML 字符串数据
    NSString *htmlString2 = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]
    encoding:NSUTF8StringEncoding
    error:NULL];
    [webView loadHTMLString:htmlString2 baseURL:nil]; // 加载 Data 数据
    /*
    比 loadHTMLString 更底层
    */
    NSData *data = [NSData dataWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Baidu" ofType:@"html"]]];
    [webView loadData:data MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL URLWithString:@"https://m.baidu.com/"]]; // 适配屏幕
    /*
    YES 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
    */
    webView.scalesPageToFit = YES; // 设置自动分页模式
    /*
    UIWebPaginationModeUnpaginated, // 默认不分页
    UIWebPaginationModeLeftToRight,
    UIWebPaginationModeTopToBottom,
    UIWebPaginationModeBottomToTop,
    UIWebPaginationModeRightToLeft
    */
    webView.paginationMode = UIWebPaginationModeLeftToRight; // 设置超链接类型
    /*
    UIDataDetectorTypePhoneNumber = 1 << 0, // Phone number detection
    UIDataDetectorTypeLink = 1 << 1, // URL detection
    UIDataDetectorTypeAddress = 1 << 2, // Street address detection
    UIDataDetectorTypeCalendarEvent = 1 << 3, // Event detection UIDataDetectorTypeNone = 0, // No detection at all
    UIDataDetectorTypeAll = NSUIntegerMax // All types
    */
    webView.dataDetectorTypes = UIDataDetectorTypeAll; // 设置是否用内嵌 HTML5 播放视频
    /*
    内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
    YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
    */
    webView.allowsInlineMediaPlayback = NO; // 设置是否需要用户触发来启动媒体播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackRequiresUserAction = NO; // 设置本页面是否可以 AirPlay 播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackAllowsAirPlay = YES; // 设置是否把网页内容全部加载到内存中再去渲染
    /*
    iPhone and iPad Safari both default to NO
    */
    webView.suppressesIncrementalRendering = NO; // 设置是否需要用户触发显示键盘
    /*
    default is YES
    */
    webView.keyboardDisplayRequiresUserAction = NO; // 刷新
    /*
    重新加载页面
    */
    [webView reload]; // 停止加载
    /*
    加载过程中,强行停止加载
    */
    [webView stopLoading]; // 返回至上一个链接
    /*
    在产生多个链接浏览时,可以返回至浏览历史的上一个链接
    */
    [webView goBack]; // 前进至下一个链接
    /*
    在产生多个链接浏览时,可以前进至浏览历史的下一个链接
    */
    [webView goForward]; // 设置代理,需遵守协议 <UIWebViewDelegate>
    webView.delegate = self;
  • Swift

    	// 加载指定 URL 所设定的内容
    /*
    异步加载,可以从服务器和本地读取
    */ // 加载网络数据
    webView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.baidu.com")!)) // 加载本地文件
    webView.loadRequest(NSURLRequest(URL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "pdf")!))) // 加载 HTML 字符串数据
    /*
    指定 URL 可加载图片
    */ // 加载网络 HTML 字符串数据
    let htmlString1:String = try! String(contentsOfURL: NSURL(string: "https://m.baidu.com/")!, encoding: NSUTF8StringEncoding)
    webView.loadHTMLString(htmlString1, baseURL: NSURL(string: "https://m.baidu.com/")!) // 加载本地 HTML 字符串数据
    let htmlString2:String = try! String(contentsOfFile: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!,
    encoding: NSUTF8StringEncoding)
    webView.loadHTMLString(htmlString2, baseURL: nil) // 加载 Data 数据
    /*
    比 loadHTMLString 更底层
    */
    let data = NSData(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("Baidu", ofType: "html")!))
    webView.loadData(data!, MIMEType: "text/html", textEncodingName: "utf-8", baseURL: NSURL(string: "https://m.baidu.com/")!) // 适配屏幕
    /*
    true 页面可以通过放大和缩小去适应,用户也可以通过手势来放大和缩小
    */
    webView.scalesPageToFit = true // 设置自动分页模式
    /*
    case Unpaginated // 默认不分页
    case LeftToRight
    case TopToBottom
    case BottomToTop
    case RightToLeft
    */
    webView.paginationMode = .Unpaginated // 设置超链接类型
    /*
    PhoneNumber // Phone number detection
    Link // URL detection
    Address // Street address detection
    CalendarEvent // Event detection None // No detection at all
    All // All types
    */
    webView.dataDetectorTypes = .All // 设置是否用内嵌 HTML5 播放视频
    /*
    内嵌播放 HTML 中的 video 元素必须包含 webkit-playsinline 属性
    YES 内嵌播放,NO 本地全屏控制,iPhone Safari defaults to NO. iPad Safari defaults to YES
    */
    webView.allowsInlineMediaPlayback = false // 设置是否需要用户触发来启动媒体播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackRequiresUserAction = false // 设置本页面是否可以 AirPlay 播放
    /*
    iPhone and iPad Safari both default to YES
    */
    webView.mediaPlaybackAllowsAirPlay = true // 设置是否把网页内容全部加载到内存中再去渲染
    /*
    iPhone and iPad Safari both default to NO
    */
    webView.suppressesIncrementalRendering = false // 设置是否需要用户触发显示键盘
    /*
    default is YES
    */
    webView.keyboardDisplayRequiresUserAction = false // 刷新
    /*
    重新加载页面
    */
    webView.reload() // 停止加载
    /*
    加载过程中,强行停止加载
    */
    webView.stopLoading() // 返回至上一个链接
    /*
    在产生多个链接浏览时,可以返回至浏览历史的上一个链接
    */
    webView.goBack() // 前进至下一个链接
    /*
    在产生多个链接浏览时,可以前进至浏览历史的下一个链接
    */
    webView.goForward() // 设置代理,需遵守协议 UIWebViewDelegate
    webView.delegate = self

3、UIWebView 的协议方法

  • 需遵守协议 UIWebViewDelegate,并设置代理

  • Objective-C

    	// 将要开始加载网页
    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return YES;
    } // 开始加载网页
    - (void)webViewDidStartLoad:(UIWebView *)webView { } // 加载网页完成
    - (void)webViewDidFinishLoad:(UIWebView *)webView { } // 加载网页失败
    - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { }
  • Swift

        // 将要开始加载网页
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { return true
    } // 开始加载网页
    func webViewDidStartLoad(webView: UIWebView) { } // 加载网页完成
    func webViewDidFinishLoad(webView: UIWebView) { } // 加载网页失败
    func webView(webView: UIWebView, didFailLoadWithError error: NSError?) { }

iOS - UIWebView的更多相关文章

  1. ios UIWebView截获html并修改便签内容(转载)

    ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...

  2. IOS UIWebView截获html并修改便签内容,宽度自适应

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服 ...

  3. ios UIWebView截获html并修改便签内容

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...

  4. iOS UIWebView 获取内容实际高度,关闭滚动效果

    本文转载至 http://my.oschina.net/Khiyuan/blog/341535   iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...

  5. iOS UIWebView获取403/404

    问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理. ...

  6. iOS UIWebView与JavaScript的交互 相关资料

    UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整 ...

  7. ios UIWebView自定义Alert风格的弹框

    之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...

  8. iOS --- UIWebView的加载本地数据的三种方式

    UIWebView是IOS内置的浏览器,可以浏览网页,打开文档  html/htm  pdf   docx  txt等格式的文件.  safari浏览器就是通过UIWebView做的. 服务器将MIM ...

  9. iOS UIWebView中javascript与Objective-C交互、获取摄像头

    UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...

随机推荐

  1. 【jqGrid for ASP.NET MVC Documentation】.学习笔记.2.jqGrid Model-View-Controller 分离

    1 基本 分离代码 和 描述 ,在ASP.NET MVC 应用程序中是非常重要的.因此,jqGrid 的 mvc 模式使用一个共同的网格安装设置,包括 Model ,Controller 和 View ...

  2. JavaEE基础(二十二)/IO流

    1.IO流(序列流) 1.什么是序列流 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, 以此类推. 2.使用方式 整合两个: ...

  3. HDU 3966:Aragorn's Story(树链剖分)

    http://acm.hdu.edu.cn/showproblem.php?pid=3966 题意:有n个点n-1条边,每个点有一个权值,有两种操作:询问一个点上权值是多少和修改u到v这条链上的权值. ...

  4. aspnet excel导入导出SQLserver

    http://my.csdn.net/libin690145955/code/detail/452 http://blog.csdn.net/ltoper/article/details/532980 ...

  5. 【转】表删除时 Cannot delete or update a parent row: a foreign key constraint fails 异常处理

    转载地址:http://lijiejava.iteye.com/blog/790478 有两张表,结构如下: t_item:                          t_bid: id    ...

  6. intellij idea 10.5介绍

    IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.Ant.JUn ...

  7. [团队项目3.0]Scrum团队成立

    Scrum团队成立 5.Scrum团队成立 5.1 团队名称,团队目标.团队口号.团队照: 5.2 角色分配 产品负责人: 决定开发内容和优先级排序,最大化产品以及开发团队工作的价值. Scrum M ...

  8. jar的下载地址及其使用说明

    有时候会苦于jar的搜索.这里我就给出我平时用到的吧,方便大家.后期会不断添加. 1.dom4j-1.6.1.jar 主要用于解析xml的jar包.下载地址:   http://pan.baidu.c ...

  9. Unity脚本在层级面板中的执行顺序测试2

    上一篇测试了生成顺序对执行顺序的影响,链接:LINK 执行顺序测试3: LINK 这篇主要测试一下Awake,OnEnable,Start三个常用消息的循环顺序 1.测试消息循环顺序 先上一个最简单的 ...

  10. Uva 1347,旅行

    题目链接:https://uva.onlinejudge.org/external/13/1347.pdf 这个题和uva 1658题目很像,只是加了一点,就是每个点都要走,刚开始,我以为可以直接拆点 ...