h5太火了,越来越多的公司喜欢混合开发。现在公司各种web页面,使用灵活(主要是苹果审核太慢了)。本人在Stack Overflow
看过一篇文章意思是苹果也比较推荐app中适量的web页面,当然全web直接会被拒的。
一个吊吊的控件webView
这是一个非常强大的控件,给一个地址就能加载web页面,所以以后不会的难得就让web做哈哈。
首先最好掌握点html和css语言,还好大学学的还没有忘完,书到用时方恨少啊。
介绍方法时会介绍一些使用场景
-
加载内容
//加载网络
NSURL* url = [NSURL URLWithString:@"http://www.baidu.com"];//创建URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];//创建NSURLRequest
[webView loadRequest:request];//加载
//也可以加载一个本地资源:
NSURL* url = [NSURL fileURLWithPath:filePath];//创建URL
NSURLRequest* request = [NSURLRequest requestWithURL:url];//创建NSURLRequest
[webView loadRequest:request];//加载
//UIWebView 还支持将一个NSString对象作为源来加载。你可以为其提供一个基础URL,来指导UIWebView对象如何跟随链接和加载远程资源:
[webView loadHTMLString:myHTML baseURL:[NSURL URLWithString:@"http://baidu.com"]];
- ####导航
你会遇到这个问题在webView页面点击进去新的页面,点击返回pop整个页面。一般做法会在左上角设置两个按钮一个pop一个控制webView返回。
//UIWebView类内部会管理浏览器的导航动作,通过goForward和goBack方法你可以控制前进与后退动作:
[webView goBack];
[webView goForward];
[webView reload];//重载
[webView stopLoading];//取消载入内容
- ####代理方法
经常在web页面加载gif等待图片,通常是通过代理方法实现,结合1和2代理方法。
1、- (void)webViewDidStartLoad:(UIWebView *)webView;开始加载的时候执行该方法。
2、- (void)webViewDidFinishLoad:(UIWebView *)webView;加载完成的时候执行该方法。
3、- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error;加载出错的时候执行该方法。
4、- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType;在该代理方法中判断与webView的交互,可通过html里定义。
方法2是一个很重要的代理方法,如何对这个web页面动手术都是在里面进行的:
######~eg:
- [计算 webView 显示内容后实际高度](http://www.jianshu.com/p/f3aa4852e7de)
- [改变UIWebView背景色](http://www.jianshu.com/p/e8eb63b4b3fd)
总结一下`stringByEvaluatingJavaScriptFromString`这个方法他是调用js的方法。所以你可以做很多事(但是你要会js)。
- ####下载到本地在加载到webView
NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent] stringByAppendingPathComponent:@"Documents"]];
NSString *filePath = [resourceDocPath stringByAppendingPathComponent:[NSString stringWithFormat:@"doc%@",docType]];
NSData *attachmentData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:theUrl]];
[attachmentData writeToFile:filePath atomically:YES];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[attachmentWebView loadRequest:requestObj];