iOS组件之UIWebView详解
引言
UIWebView是继承于UIView(有关UIView请参照《iOS组件之UIView详解》),在您的应用程序中,您可以使用UIWebView嵌入网页内容。要做到这一点,你只需创建一个UIWebView对象,将其附加到一个窗口,并发送一个请求来加载网页内容。您也可以使用此类前进和后退的网页的历史记录,甚至可以通过编程设置一些网页内容属性。
目录
1、基本属性及方法
2、iOS5新增
3、iOS6新增
4、iOS7新增
5、UIWebViewDelegate协议(可选)
1、基本属性及方法
// 设置代理
id<UIWebViewDelegate> delegate;
// 加载一个url地址
- (void)loadRequest:(NSURLRequest *)request;
// 加载一个html的string
- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL;
//
- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName baseURL:(NSURL *)baseURL;
// 获取web的请求
NSURLRequest *request;
// 重新加载
- (void)reload;
// 停止加载
- (void)stopLoading;
// 返回
- (void)goBack;
// 前进
- (void)goForward;
// 是否能返回(只读)
BOOL canGoBack;
// 是否能前进(只读)
BOOL canGoForward;
// 是否正在加载(只读)
BOOL loading;
// 添加javascript
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
// 默认值为NO,用户不可以放大或缩小页面;如果设置为YES,页面可以通过放大缩小去适应,用户也可以通过手势来放大和缩小
BOOL scalesPageToFit;
// 如果设置为YES,用户必须明确的点击页面上的元素或者相关联的输入页面来显示键盘;如果设置为NO,一个元素的焦点事件导致输入视图的显示和自动关联这个元素。
BOOL detectsPhoneNumbers;
// 把网页上内容转换成可点击的链接类型
UIDataDetectorTypes dataDetectorTypes;
// 这个值决定了用内嵌HTML5播放视频还是用本地的全屏控制。为了内嵌视频播放,不仅仅需要在这个页面上设置这个属性,还必须的是在HTML中的video元素必须包含webkit-playsinline属性。(iPhone默认为NO, iPad默认为YES)
BOOL allowsInlineMediaPlayback;
// 在iPhone和iPad上默认使YES。这个值决定了HTML5视频可以自动播放还是需要用户去启动播放
BOOL mediaPlaybackRequiresUserAction;
2、iOS5新增
// 获取webView中的scrollView(只读)
UIScrollView *scrollView;
// 这个值决定了从这个页面是否可以Air Play(默认YES)
BOOL mediaPlaybackAllowsAirPlay;
3、iOS6新增
// 这个值决定了网页内容的渲染是否在把内容全部加载到内存中再去处理。如果设置为YES,只有网页内容加载到内存里了才会去渲染(默认值为NO)
BOOL suppressesIncrementalRendering;
// 如果设置为YES,用户必须明确的点击页面上的元素或者相关联的输入页面来显示键盘;如果设置为NO,一个元素的焦点事件导致输入视图的显示和自动关联这个元素。(默认为YES)
BOOL keyboardDisplayRequiresUserAction;
4、iOS7新增
// 随意翻阅模式
UIWebPaginationMode paginationMode;
UIWebPaginationBreakingMode paginationBreakingMode;
CGFloat pageLength;
CGFloat gapBetweenPages;
当在原生应用中,使用 UIWebView 实现丰富内容时,或者对于原生 webapp,我们可以为了电子书阅读体验使用 Paginate (随意翻阅)特性,避免垂直滚动条(类似 Windows 8 应用体验)。如果应用显示动态内容,这一特性是完美的,我们不能预先优化分页。有不同的 Objective-C 属性配置分页过程。要启用它,需要这么做:
myWebView.paginationMode = UIWebPaginationModeLeftToRight;
myWebView.paginationBreakingMode = UIWebPaginationBreakingModePage;
myWebView.gapBetweenPages = 50;
// 获取页码总数(只读)
NSUInteger pageCount;
5、UIWebViewDelegate协议(可选)
//当网页视图被指示载入内容而得到通知。应当返回YES,这样会进行加载。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
// 开始加载的时候执行该方法。
- (void)webViewDidStartLoad:(UIWebView *)webView;
// 加载完成的时候执行该方法。
- (void)webViewDidFinishLoad:(UIWebView *)webView;
// 加载出错的时候执行该方法。
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;