前言

	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. oracle sqlloader 用法

    向oracle中导入*.csv文件   1.什么是*.csv,如何得到? 里面存放的是数据表.每行代表数据库表格的一行, 每行中,每两个数据中间由逗号","分割. *.csv可以通 ...

  2. Docker第三方项目小结

    软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...

  3. Install Hive

    一.Hive将元数据存储在RDBMS中,有三种模式可以连接到数据: 1.single User Mode:此模式连接到一个In-memory的数据库Derby,一般用于Unit Test. 2.Mul ...

  4. Windows驱动开发(中间层)

    Windows驱动开发 一.前言 依据<Windows内核安全与驱动开发>及MSDN等网络质料进行学习开发. 二.初步环境 1.下载安装WDK7.1.0(WinDDK\7600.16385 ...

  5. 判断listview是上滑还是下滑的方法

    方法一: 用setOnScrollListener(new AbsListView.OnScrollListener())来实现,判断滑动后显示的第一个条目 ,与滑动前的第一个条目的大小来判断, 这种 ...

  6. [ios][swift]提示框,并自动消失

    参考: 提示框:http://blog.csdn.net/gishero/article/details/43941361 提示框自动消失:http://www.cnblogs.com/yemingl ...

  7. c# 之抽象工厂模式

    Email整体项目 Email类 using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  8. poj1987 Distance Statistics

    普通dfs访问每个点对的复杂度是O(n^2)的,显然会超时. 考虑访问到当前子树的根节点时,统计所有经过根的点(u, v)满足: dist(u) + dist(v) <= maxd,并且 bel ...

  9. UML类图几种关系的总结(转)

    原文:http://gjhappyyy.iteye.com/blog/1422515 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), ...

  10. Unity Shader中自定义枚举类型

    效果 脚本: Properties { _MainTex ("Texture", 2D) = "white" {} [Enum(Enum1,,Enum2,)]_ ...