iOS - UIWebView
前言
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,可以将其像其它控件一样应用到需要的位置。
优点:简单,快速。
缺点:内存消耗大,对于手机端的硬件支持不够好,例如:定位,捏合(传统互联网只有点击动作)。
应用场景:
适合于内容版式变化比较大的应用。
网易新闻,各种图文混排,甚至嵌入视频。
菜谱,各种图片搭配,图文并茂。
运动类的应用:羽毛球,后场高远球,来一段视频,图解说明,分解动作...。有些公司,有网站,没有 iOS 应用,着急上架,可以先用 webView 快速包装一个。
百度的一系列应用,去年年初才慢慢的转成 iOS 应用。
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的更多相关文章
- ios UIWebView截获html并修改便签内容(转载)
ios UIWebView截获html并修改便签内容 博客分类: iphone开发iphone开发phoneGap uiwebviewstringByEvaluatingJavaScriptFromS ...
- IOS UIWebView截获html并修改便签内容,宽度自适应
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服 ...
- ios UIWebView截获html并修改便签内容
需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...
- iOS UIWebView 获取内容实际高度,关闭滚动效果
本文转载至 http://my.oschina.net/Khiyuan/blog/341535 iOS UIWebView 获取内容实际高度,关闭滚动效果 近期做东西,将 UIWebView 嵌套 ...
- iOS UIWebView获取403/404
问题描述 与WindowsPhone不同,iOS UIWebView并不认为403/404这种情况下页面访问是失败的,这也情有可原,但有时候,我们需要对WebView所遇到的403/404进行处理. ...
- iOS UIWebView与JavaScript的交互 相关资料
UIWebView自适应宽度 iOS UIWebView中javascript与Objective-C交互.获取摄像头 iOS中JavaScript和OC交互 iOS与js交互,获取webview完整 ...
- ios UIWebView自定义Alert风格的弹框
之前开发过一个App,因为公司之前写好了网页版的内容和安卓版本的App,我进去后老板要求我ios直接用网页的内容,而不需要自己再搭建框架.我一听,偷笑了,这不就是一个UIWebView吗?简单! 但是 ...
- iOS --- UIWebView的加载本地数据的三种方式
UIWebView是IOS内置的浏览器,可以浏览网页,打开文档 html/htm pdf docx txt等格式的文件. safari浏览器就是通过UIWebView做的. 服务器将MIM ...
- iOS UIWebView中javascript与Objective-C交互、获取摄像头
UIWebView是iOS开发中常用的一个视图控件,多数情况下,它被用来显示HTML格式的内容. 支持的文档格式 除了HTML以外,UIWebView还支持iWork, Office等文档格式: Ex ...
随机推荐
- 正则表达式用户名密码电话身份证Email使用
月末了,这个月才写了2遍文章,对自己略感失望了,最近是有些忙,等闲些日子后,再整理一些文章分享给大家! 这遍是关于正则表达式,因为写项目时要用到正则表达式,所以就学习了下,另写一遍文章,方便记忆! 1 ...
- VC中常用的宏
我们在VS环境中开发的时候,会遇到很多宏定义,这些宏可以应用到代码中,或用于编译.工程选项等设置,总之是我们开发中必不可少的工具,有必要做一个总结.有些宏是C/C++定义的,有些宏是VC环境预 ...
- php两种include加载文件方式效率比较如下
1)定义一个字符串变量,里面保存要加载的文件列表.然后foreach加载. $a = '/a.class.php;/Util/b.class.php;/Util/c.class.php'; $b = ...
- Android系统版本与API Level对照表
Platform Version API Level VERSION_CODE Notes Android 4.2 17 JELLY_BEAN_MR1 Android 4.1, 4.1.1 16 ...
- 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数
1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...
- 使用ResourceBundle访问资源文件(properties)帮助类
import java.util.ResourceBundle; /** * 读取properties文件的帮助类 * @author */ public class PropertiesUtil { ...
- [ios]离屏渲染优化
原文链接:https://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=2709544818&idx=1&sn=62d0d2e9a ...
- Python中的变量、引用、拷贝和作用域
在Python中,变量是没有类型的,这和以往看到的大部分编辑语言都不一样.在使用变量的时候,不需要提前声明,只需要给这个变量赋值即可.但是,当用变量的时候,必须要给这个变量赋值:如果只写一个变量,而没 ...
- sql排序 去除默认升降序排序case方法////遍历数据库所有表及统计表数据总数
case排序法: end 还有EXEC法 可以网上查 SQLServer遍历数据库所有表及统计表数据总数: DECLARE @TableName varchar(); CREATE TABLE #Ge ...
- 周赛-The Number Off of FFF 分类: 比赛 2015-08-02 09:27 3人阅读 评论(0) 收藏
The Number Off of FFF Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...