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 ...
随机推荐
- php const define 区别有那些呢?
(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...
- iOS开发系列之 itms-services 协议
通过 itms-services 协议,发布或者分享 iOS 应用程序 通过 itms-services 协议,发布或者分享 iOS 应用程序 <button onclick="w ...
- YTU 3006: 迷宫问题(栈与队列)
3006: 迷宫问题(栈与队列) 时间限制: 1 Sec 内存限制: 128 MB 提交: 3 解决: 1 题目描述 编写一个求解迷宫问题的程序,要求输出迷宫的所有路径,并求最短路径长度及最短路径 ...
- 20150601_Andriod 打开新窗体
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="htt ...
- Wormholes 分类: POJ 2015-07-14 20:21 21人阅读 评论(0) 收藏
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35235 Accepted: 12861 Descr ...
- 2016年11月4日 星期五 --出埃及记 Exodus 19:20
2016年11月4日 星期五 --出埃及记 Exodus 19:20 The LORD descended to the top of Mount Sinai and called Moses to ...
- Date日期比对
Calendar calendar1 = Calendar.getInstance(); Calendar calendar2 = Calendar.getInstance(); calendar1. ...
- UIActionSheet 这样写为什么显示为空白 ???
func pickePhotoFromSheet() { var sheet:UIActionSheet = UIActionSheet() var button = UIButton.button ...
- SqlSever基础 ltrim函数 除去字符串左边的空格,右边的中间的不管
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- 数据库SQL语句练习题10--18
10.查询Score表中的最高分的学生学号和课程号.(子查询或者排序) select t.sno,t.cno from SCORE t where degree = (select max(degre ...