声明
在应用程序中嵌入web内容的视图。
@interface UIWebView : UIView
iOS 2.0–12.0(Deprecated)(弃用)
概述
请注意
在iOS 8及以后运行的应用程序中,使用WKWebView类而不是UIWebView。此外,如果呈现的文件不应该运行JavaScript,可以考虑将WKPreferences属性javaScriptEnabled设置为NO。
重要的
在iOS 10.0上或之后链接的iOS应用程序必须包含在其信息中。plist文件的使用说明键类型的数据,它需要访问,否则它将崩溃。要访问用户的照片数据,它必须包括NSPhotoLibraryUsageDescription和NSCameraUsageDescription。
使用loadHTMLString:baseURL:方法开始加载本地HTML文件,或者使用loadRequest:方法开始加载web内容。使用stopLoading方法停止加载,并使用loading属性确定web视图是否正在加载过程中。
如果允许用户在页面历史记录中来回移动,则可以使用goBack和goForward方法作为按钮的操作。使用canGoBack和canGoForward属性在用户无法在某个方向移动时禁用按钮。
默认情况下,web视图自动将出现在web内容中的电话号码转换为电话链接。当手机链接被点击时,手机应用程序就会启动并拨号。要关闭此默认行为,请使用不包含UIDataDetectorTypePhoneNumber标志的UIDataDetectorTypes位字段设置dataDetectorTypes属性。
还可以使用scalesPageToFit属性以编程方式设置web内容第一次在web视图中显示时的比例。然后,用户可以使用手势改变scale。
如果想跟踪web内容的加载,请将委托属性设置为符合UIWebViewDelegate协议的对象。
重要的
你不应该在UIScrollView对象中嵌入UIWebView或UITableView对象。如果这样做,可能会导致意外的行为,因为这两个对象的触摸事件可能会混淆并被错误地处理。
您可以使用Web Inspector轻松调试包含在UIWebView中的HTML、CSS和JavaScript。阅读调试iOS上的Web内容,了解如何为iOS配置Web检查器。阅读Safari Web Content Guide的其余部分,了解如何创建为iPhone和iPad上的Safari优化的Web内容。
有关基本视图行为的信息,请参阅iOS视图编程指南。
支持文件格式
除了HTML内容,UIWebView对象还可以用来显示其他内容类型,如Keynote、PDF和Pages文档。然而,要在应用程序中实现对纯文本和富文本的最佳呈现,应该使用UITextView。
国家保护
在ios6及以后版本中,如果你给这个视图的restoration Identifier属性赋值,它会尝试保存它的URL历史,每个页面的缩放和滚动位置,以及当前正在查看的页面的信息。在恢复期间,视图将恢复这些值,以便web内容与以前一样显示。有关状态保存和恢复工作原理的更多信息,请参见App Programming Guide for iOS。
有关外观和行为配置的更多信息,请参见Web视图。
子类化的笔记
UIWebView类不应该被子类化。
响应Web视图更改
接收方的委托。
@property(nonatomic, assign) id<UIWebViewDelegate> delegate;
// 讨论
在加载内容时发送消息给委托。
有关此委托可能实现的可选方法,请参见UIWebViewDelegate。
// 重要的
在释放一个UIWebView实例之前,你已经为它设置了一个委托,你必须首先将它的委托属性设置为nil。
这可以在dealloc方法中实现。
--------------------------------------------------------------------------------
UIWebViewDelegate协议定义了一些方法,UIWebView对象的委托可以选择性地实现这些方法来在加载web内容时进行干预。
@protocol UIWebViewDelegate
// 重要的
在释放一个UIWebView的实例之前,你已经为它设置了一个委托,你必须在处理UIWebView实例之前先将UIWebView委托属性设置为nil。
这可以做到,例如,在dealloc方法中处理UIWebView。
// 代理方法
在web视图开始加载frame之前发送。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
(navigationType)启动加载请求的用户操作的类型。
如果web view应该开始加载内容,YES;否则,NO。
在web视图开始加载frame后发送。
- (void)webViewDidStartLoad:(UIWebView *)webView;
在web视图加载完frame后发送。
- (void)webViewDidFinishLoad:(UIWebView *)webView;
如果web视图未能加载frame,则发送。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;
(error)加载过程中发生的错误。
加载内容
设置主页内容、MIME类型、内容编码和基本URL。
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
// data
主页的内容。
// MIMEType
内容的MIME类型。
// encodingName
在utf-8或utf-16中编码名称的IANA。
// baseURL
内容的baseURL。
--------------------------------------------------------------------------------
设置主页内容和baseURL。
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
// 讨论
为了帮助您避免受到安全攻击,请确保使用此方法加载本地HTML文件;不要使用loadRequest:。
--------------------------------------------------------------------------------
通过发起异步客户机请求连接到给定的URL。
- (void)loadRequest:(NSURLRequest *)request;
// 讨论
不要使用此方法加载本地HTML文件;相反,使用loadHTMLString: baseURL:。
要停止此加载,请使用stopLoading方法。
要查看接收者是否已经加载了内容,请使用load属性。
--------------------------------------------------------------------------------
标识要加载内容位置的URL请求。
@property(nonatomic, readonly, strong) NSURLRequest *request;
--------------------------------------------------------------------------------
一个布尔值,指示接收器是否已加载内容。
@property(nonatomic, readonly, getter=isLoading) BOOL loading;
如果YES,则接收方仍在加载内容;否则,NO。
--------------------------------------------------------------------------------
停止加载由接收方管理的任何web内容。
- (void)stopLoading;
// 讨论
停止主框架或其子框架加载过程中的任何内容。
如果没有加载内容,则不执行任何操作。
--------------------------------------------------------------------------------
// 重新加载当前页面。
- (void)reload;
来回移动
指示接收器是否可以向后移动的布尔值。
@property(nonatomic, readonly, getter=canGoBack) BOOL canGoBack;
// 讨论
如果YES,则能够向后移动;否则,NO。
--------------------------------------------------------------------------------
一个布尔值,指示接收方是否可以向前移动。
@property(nonatomic, readonly, getter=canGoForward) BOOL canGoForward;
如果YES,能够继续前进;否则,NO。
--------------------------------------------------------------------------------
加载前向列表中的前一个位置。
- (void)goBack;
--------------------------------------------------------------------------------
加载后向前列表中的下一个位置。
- (void)goForward;
设置Web内容属性
一个布尔值,用于确定是否按下链接显示链接的目标预览。
@property(nonatomic) BOOL allowsLinkPreview;
// 讨论
此属性可用于支持3D触摸的设备。
默认值为NO。
如果将web视图的这个值设置为YES,用户(使用支持3D Touch的设备)可以预览链接目的地,
并可以通过单击链接预览检测到的数据,比如地址。
用户将这种预览称为peeks。
如果用户按得更深,预览就会导航(或者按用户术语称为pop)到目标。
因为pop导航将用户从应用程序切换到Safari,所以通过这个属性,它是opt-in,而不是这个类的默认行为。
如果你想支持链接预览但又想让用户留在你的应用中,你可以从使用UIWebView类切换到使用SFSafariViewController类。
如果您使用web view作为应用程序内浏览器,那么进行此更改是最佳实践。
Safari视图控制器类自动支持链接预览。
--------------------------------------------------------------------------------
一个布尔值,确定网页是否缩放以适合视图,用户是否可以更改缩放。
@property(nonatomic) BOOL scalesPageToFit;
// 讨论
如果YES,则将页面缩放到适合的大小,用户可以放大和缩小。
如果NO,则禁用用户缩放。默认值是NO。
--------------------------------------------------------------------------------
与web视图关联的滚动视图。
@property(nonatomic, readonly, strong) UIScrollView *scrollView;
// 讨论
如果应用程序想定制web视图的滚动行为,它可以访问滚动视图。
--------------------------------------------------------------------------------
一个布尔值,指示web视图是否在将内容呈现完全加载到内存中之前抑制内容呈现。
@property(nonatomic) BOOL suppressesIncrementalRendering;
// 讨论
当设置为YES时,web视图不会尝试在传入内容到达时呈现它。
相反,视图的当前内容保持不变,直到接收到所有新内容,然后呈现新内容。
此属性不影响在框架加载完成后检索内容的呈现。
默认情况下,此属性的值为NO。
--------------------------------------------------------------------------------
一个布尔值,指示web内容是否可以通过编程方式显示键盘。
@property(nonatomic) BOOL keyboardDisplayRequiresUserAction;
// 讨论
当此属性设置为YES时,用户必须显式地点击web视图中的元素,以显示该元素的键盘(或其他相关输入视图)。
当设置为NO时,元素上的焦点事件将自动显示input视图并与该元素关联。
此属性的默认值为YES。
--------------------------------------------------------------------------------
转换为web视图内容中可单击url的数据类型。
@property(nonatomic) UIDataDetectorTypes dataDetectorTypes;
// 讨论
使用此属性指定应自动转换为web视图中可单击url的数据类型(电话号码、HTTP链接、电子邮件地址等)。
单击后,web视图打开负责处理URL类型的应用程序,并将URL传递给它。
有关可用于自动检测的数据类型,请参见UIDataDetectorTypes枚举。
运行JavaScript
返回运行JavaScript脚本的结果。
虽然不反对使用此方法,但最佳实践是使用WKWebView类的evaluateJavaScript:completionHandler:方法。
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
// script
要运行的JavaScript脚本。
// 返回值
运行传递给脚本参数的JavaScript脚本的结果,如果脚本失败,则返回nil。
// 讨论
新的应用程序应该使用来自WKWebView类的evaluateJavaScript:completionHandler:方法。
如果可能的话,遗留应用程序应该采用这种方法。
// 重要的
stringByEvaluatingJavaScriptFromString:方法同步等待JavaScript计算完成。
如果您加载的web内容的JavaScript代码没有经过您的审核,那么调用这个方法可能会挂起您的应用程序。
最佳实践是采用WKWebView类并使用它的evaluateJavaScript:completionHandler:方法。
管理媒体播放
一个布尔值,用于确定HTML5视频是内联播放还是使用本机全屏控制器。
@property(nonatomic) BOOL allowsInlineMediaPlayback;
// 讨论
必须将此属性设置为播放内联视频。
将此属性设置为true以内联播放视频。
将此属性设置为false以使用本机全屏控制器。
在iPhone上向HTML文档添加视频元素时,还必须包含playsinline属性。
iPhone的默认值为false, iPad的默认值为true。
// 重要的
在iOS 10.0之前创建的应用程序必须使用webkit-playsinline属性。
--------------------------------------------------------------------------------
一个布尔值,它决定HTML5视频是可以自动播放还是需要用户开始播放。
@property(nonatomic) BOOL mediaPlaybackRequiresUserAction;
// 讨论
iPad和iPhone的默认值都是YES。
要使媒体在加载时自动播放,请将此属性设置为NO,并确保要播放的<audio>或<video>元素具有自动播放属性设置。
--------------------------------------------------------------------------------
一个布尔值,用于确定是否允许从该视图中播放Air。
@property(nonatomic) BOOL mediaPlaybackAllowsAirPlay;
// 讨论
iPad和iPhone的默认值都是YES。
--------------------------------------------------------------------------------
一个布尔值,用于确定是否允许从该视图中播放图片。
@property(nonatomic) BOOL allowsPictureInPictureMediaPlayback;
// 讨论
默认值为YES,在支持图片模式(PiP)的设备上为YES,在所有其他设备上为NO。
管理页面
页与页之间空白的大小(以点为单位)。
@property(nonatomic) CGFloat gapBetweenPages;
默认值为0。
--------------------------------------------------------------------------------
由web视图布局产生的页面数。
@property(nonatomic, readonly) NSUInteger pageCount;
--------------------------------------------------------------------------------
每个页面的大小,以点为单位,按页面流动的方向。
@property(nonatomic) CGFloat pageLength;
// 讨论
当paginationMode从右到左或从左到右时,此属性表示每个页面的宽度。
当paginationMode为自上而下或自下而上时,此属性表示每个页面的高度。
默认值为0,这意味着布局使用viewport的大小来确定页面的大小。
调整此属性的值会导致中继。
--------------------------------------------------------------------------------
列或页中断发生的方式。
@property(nonatomic) UIWebPaginationBreakingMode paginationBreakingMode;
// 讨论
此属性确定是否启用与列和分页有关的某些CSS属性或忽略这些属性。
当这个属性被设置为UIWebPaginationBreakingModeColumn时,内容会尊重与换行相关的CSS属性,而不是换行。
有关可能的值,请参见UIWebPaginationBreakingMode。
默认值是UIWebPaginationBreakingModePage。
--------------------------------------------------------------------------------
web视图中内容的布局。
@property(nonatomic) UIWebPaginationMode paginationMode;
// 讨论
此属性确定web视图中的内容是被分解为每次一个屏幕填充视图的页面,还是作为一个长滚动视图显示。
如果设置为分页形式,此属性将切换内容上的分页布局,从而使web视图使用pageLength和gapbetween页面的值来转发其内容。
有关可能的值,请参见UIWebPaginationMode。
默认值是uiwebpaginationmodeunpagized。
相关宏
表示用户操作的常量。
typedef enum UIWebViewNavigationType : NSInteger {
...
} UIWebViewNavigationType;
UIWebViewNavigationTypeLinkClicked
用户点击链接。
UIWebViewNavigationTypeFormSubmitted
用户提交了一个表单。
UIWebViewNavigationTypeBackForward
用户轻击后退或前进按钮。
UIWebViewNavigationTypeReload
用户点击“重新加载”按钮。
UIWebViewNavigationTypeFormResubmitted
用户重新提交表单。
UIWebViewNavigationTypeOther
还发生了其他一些动作。
--------------------------------------------------------------------------------
列或页中断发生的方式。
typedef enum UIWebPaginationBreakingMode : NSInteger {
...
} UIWebPaginationBreakingMode;
UIWebPaginationBreakingModePage
内容涉及与分页相关的CSS属性。
UIWebPaginationBreakingModeColumn
内容涉及与列分解相关的CSS属性。
--------------------------------------------------------------------------------
web视图中内容的布局,它决定页面流动的方向。
typedef enum UIWebPaginationMode : NSInteger {
...
} UIWebPaginationMode;
UIWebPaginationModeUnpaginated
内容显示为一个长滚动视图,没有不同的页面。
UIWebPaginationModeLeftToRight
内容被分成从左到右流动的页面。
UIWebPaginationModeTopToBottom
内容被分成从上到下流动的页面。
UIWebPaginationModeBottomToTop
内容被分成从底部到顶部流动的页面。
UIWebPaginationModeRightToLeft
内容被分成从右向左流动的页面。
--------------------------------------------------------------------------------
定义可以在基于文本的内容中检测到的信息类型。
typedef enum UIDataDetectorTypes : NSUInteger {
...
} UIDataDetectorTypes;
UIDataDetectorTypePhoneNumber
检测格式化为电话号码的字符串。
UIDataDetectorTypeLink
检测格式化为url的字符串。
UIDataDetectorTypeAddress
检测格式化为地址的字符串。
UIDataDetectorTypeCalendarEvent
检测格式化为日历事件的字符串。
UIDataDetectorTypeShipmentTrackingNumber
检测格式化为包裹递送公司跟踪号的字符串。
UIDataDetectorTypeFlightNumber
检测格式化为航空公司航班号码的字符串。
UIDataDetectorTypeLookupSuggestion
检测格式化为用户可能想要查找的信息的字符串。
UIDataDetectorTypeNone
UIDataDetectorTypeAll
网友评论