本文主要是介绍UIWebView基础篇,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
UIWebView
一、介绍
功能:在app中嵌入web内容(除了HTML内容,UIWebView对象可以用来显示其他内容类型,如幻灯片、PDF、和pages文件。但是最好的呈现简易和富文本的是UITextView)。该UIWebView能完成的功能:在web页面中用类方法前进或后退,也能与web页面进行交互。
注意:iOS 8之后,使用WKWebView代替UIWebView,可以设置WKPreferences属性javaScriptEnabled为NO,使文件不支持运行javaScript。
二、特征
(1)设置代理:delegate属性
(2)加载内容:
-loadHTMLString:baseURL:设置主页面内容和基本的url
-loadRequest: 通过一个异步请求与URL连接,加载web页面。
-loadDaTa:MIMEType:textEncodingName:baseURL:设置主页面内容、MIME类型、内容编码以及url
request属性rel请求
loading一个布尔值,指明用户是否正在加载内容,如果为Yes,表明仍在加载内容。
-stopLoading停止加载web内容
-reload重新加载当前页面
1.载本地的pdf文件:
NSURL *url = [[NSBundle mainBundle]URLForResource:@”Book.pdf”withExtension:nil];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[_webView loadRequest:request];
2.加载pdf的第二种方式:
NSString *path = [[NSBundle mainBundle] pathForResource:@”Book.pdf” ofType:nil];
//以二进制的形式加载数据
NSData *data = [NSData dataWithContentsOfFile:path];
[_webView loadData:data MIMEType:@”application/pdf” textEncodingName:@”UTF-8”baseURL:nil];
3.加载本地txt文件
NSURL *url = [[NSBundle mainBundle]URLForResource:@”Book.txt”withExtension:nil];
//设置Url
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
4.加载Word
//加载Word
NSURL *url = [[NSBundle mainBundle]URLForResource:@”Book.docx”withExtension:nil];
//设置加载Url
[_webView loadRequest:[NSURLRequest requestWithURL:url]];
(3)前进和后退
canGoBack属性:一个bool值,指明消息的接受者是否能后退
canGoForward属性:一个bool值,指明消息的接受者是否能前进
-goBack
-goForward
(4)设置web内容的属性
JavaScript的执行时间被限定在10秒钟,如果执行时间超过10秒,那么页面就停止执行这个脚本。JavaScript的执行或许能够阻塞主线程,所以当脚本执行的时候不允许用户影响页面的加载。JavaScript的内存分配被限制在10M,如果超出这个限制那么页面会发生异常。
//返回运行脚本语言的结果。
-(NSString*)stringByEvaluatingJavaScriptFromString:(NSString *)script;
//一般在webViewDidFinishLoad内操作,例如:
1.[webView
stringByEvaluatingJavaScriptFromString:@”document.title”]; //获取标题
2.[[webView
stringByEvaluatingJavaScriptFromString:@”document.body.offsetHeight”]
floatValue]; //获取网页内容高度
3.[_webView
stringByEvaluatingJavaScriptFromString:@”document.documentElement.style.webkitTouchCallout
= ‘none’;”];//取消长按webView上的链接弹出actionSheet的问题
4.NSString
*doc=[webView stringByEvaluatingJavaScriptFromString:@”document.documentElement.textContent”];//获取web页面内容信息
5.UIWebView与JS的深度交互参考:http://www.cocoachina.com/ios/20150814/12985.html
//设置是否缩放到适合屏幕大小,如果是,网页缩放以适合,用户可以放大和缩小。如果没有,用户缩放是禁用的。默认值是否定的。
@property (nonatomic) BOOL scalesPageToFit;
//此属性可以设定使电话号码、网址、电子邮件和符合格式的日期等文字变为链接文字。电话号码点击后拨出电话,网址点击后会用Safari打开,电子邮件会用mail打开,而符合格式的日期会弹出一个ActionSheet,有创建事件,在Calendar中显示,和拷贝三个选项。a
@property (nonatomic) UIDataDetectorTypes dataDetectorTypes
//这个值决定了用内嵌HTML5播放视频还是用本地的全屏控制。为了内嵌视频播放,不仅仅需要在这个页面上设置这个属性,还必须的是在HTML中的video元素必须包含webkit-playsinline属性。默认使NO。
@property (nonatomic) BOOL allowsInlineMediaPlayback
//这个值决定了HTML5视频可以自动播放还是需要用户去启动播放
@property (nonatomic) BOOL mediaPlaybackRequiresUserAction
//设置音频播放是否支持air play功能
@property (nonatomic) BOOL mediaPlaybackAllowsAirPlay
//是否网页内容下载完毕才开始渲染web视图,默认为NO
@property (nonatomic) BOOL suppressesIncrementalRendering
//设置用户交互模式,默认YES;当这个属性被设置为YES,用户必须显式地利用web视图中的元素来显示键盘(或其他相关输入视图)的元素。当设置为不,关注事件对一个元素使输入视图显示并自动与元素相关联。这个属性的默认值是肯定的
@property (nonatomic) BOOL keyboardDisplayRequiresUserActionNS_AVAILABLE_IOS(6_0);
三、iOS7中的一些新特性(分页特性)—水平分页
//属性用来设置一种模式,当网页的大小超出view时,将网页以翻页的效果展示,枚举类型:
UIWebPaginationMode paginationMode
{
UIWebPaginationModeUnpaginated,//不使用翻页效果
UIWebPaginationModeLeftToRight, //将网页超出部分分页,从左向右进行翻页
UIWebPaginationModeTopToBottom, //将网页超出部分分页,从上向下进行翻页
UIWebPaginationModeBottomToTop, //将网页超出部分分页,从下向上进行翻页
UIWebPaginationModeRightToLeft //将网页超出部分分页,从右向左进行翻页
}
这个属性决定内容的web视图分为页面填充视图一个屏幕上,或显示为一个长的滚动视图。如果设置为一个分页的形式,这个属性切换分页的布局内容,导致网页视图使用的值pageLength和gapBetweenPages relayout其内容。看到UIWebPaginationMode可能值。默认值是UIWebPaginationModeUnpaginated。
//设置分页模式,该属性决定是否遵循特定的CSS属性(属性表示上下翻页还是左右翻),当属性是UIWebPaginationBreakingModeColumn,上下翻页
@property (nonatomic) UIWebPaginationBreakingMode paginationBreakingMode
//设置每一页的长度,如设置paginationMode为从左到右或从右到左,这个值表示页面的宽度;如果是从上到下,表示高度
@property (nonatomic) CGFloat pageLength
//设置每一页的间距
@property (nonatomic) CGFloat gapBetweenPages
//获取分页数
@property (nonatomic, readonly) NSUInteger pageCount
五、iOS9中的一些新特性(分屏任务系统)
//分屏中是否播放,一个布尔值,确定是否允许从画中画播放这一观点。
@property (nonatomic) BOOL allowsPictureInPictureMediaPlayback
//长按链接是否支持预览(支持3D Touch的设备);此属性可用设备上支持3d Touch。默认值是否定的。如果你将这个值设置为YES web视图,用户(设备支持3 d)可以预览链接的目的地,并且可以预览检测数据,如地址,按上链接。这些预览用户窥探。如果用户按下更深,预览导航(或持久性有机污染物,在用户的术语)的目的地。因为流行导航切换用户从应用程序到Safari,选择,这个属性,而这类的默认行为。如果你想支持链接预览,还想让用户在你的应用程序,您可以切换使用UIWebView类SFSafariViewController类。如果您正在使用一个web浏览器视图作为应用内,这种变化是最佳实践。Safari视图控制器类自动支持链接预览。
@property (nonatomic)BOOL allowsLinkPreview// default is NO
六、webView协议中的方法
//捕捉用户的操作
- (BOOL)webView:(UIWebView )webView shouldStartLoadWithRequest:(NSURLRequest)request navigationType:(UIWebViewNavigationType)navigationType;
//UIWebViewNavigationType枚举,定义了页面中用户行为的分类,包括
•UIWebViewNavigationTypeLinkClicked,用户触击了一个链接。
•UIWebViewNavigationTypeFormSubmitted,用户提交了一个表单。
•UIWebViewNavigationTypeBackForward,用户触击前进或返回按钮。
•UIWebViewNavigationTypeReload,用户触击重新加载的按钮。
•UIWebViewNavigationTypeFormResubmitted,用户重复提交表单
•UIWebViewNavigationTypeOther,发生其它行为。
//开始加载时调用的方法
- (void)webViewDidStartLoad:(UIWebView *)webView;
//结束加载时调用的方法
- (void)webViewDidFinishLoad:(UIWebView *)webView;
//加载失败时调用的方法
- (void)webView:(UIWebView )webView didFailLoadWithError:(NSError)error;
这篇关于UIWebView基础篇的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!