前言

	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. Rsync原理介绍及配置应用

    1.前言 基于LAN或WAN的网络应用之间进行数据传输或者同步非常普遍,比如远程数据镜像.备份.复制.同步,数据下载.上传.共享等等.对此,最简单.直接的做法是对数据进行完全复制.然而,数据在网络上来 ...

  2. northwind数据库介绍

    ① Categories: 种类表相应字段:CategoryID :类型ID:CategoryName:类型名;Description:类型说明;Picture:产品样本 ② CustomerCust ...

  3. MyEclipse+Android 安装配置

    1.先安装M有Eclipse    就是不断点:下一步下一步最后finish  激活:http://blog.my-eclipse.cn/myeclipse-2014-crack.html (该网站上 ...

  4. ThreadLocal的使用及介绍

    ThreadLocal总结 1.ThreadLocal使用场合主要解决多线程中数据数据因并发产生不一致问题.ThreadLocal为每个线程的中并发访问的数据提供一个副本,通过访问副本来运行业务,这样 ...

  5. Parencodings 分类: POJ 2015-06-28 22:00 7人阅读 评论(0) 收藏

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22757   Accepted: 13337 De ...

  6. PL/SQL注册码

    code:j6stndb9tk72xfbhbqczcdqnjd8lyj466n number:882851 ps:xs374ca

  7. Eclipse 中outline的小图标的含义(zend也一样)

    颜色:绿色:public黄色:protected蓝色:no modifier红色:private形状:实心:method空心:variable实心中间有字母C:classClass右侧有向右的箭头:运 ...

  8. hibernate的like用法(用占位符解决)

    原本我的写法:Query repeatClientQuery=querysession.createQuery("from ClientInfo as a " +"whe ...

  9. Mysql--学习笔记(==》简单查询三)

    -- 查看查询数据显示SELECT * FROM student; -- 显示一部分信息的查询SELECT sname 姓名,sscore 成绩,saddress 家庭住址 FROM student; ...

  10. Objective之ARC

    http://blog.csdn.net/siemenliu/article/details/7891345