UIWebView是苹果给我们提供展示网页的一种控件。
UIWebView的基本用法
我们一般这样创建并加载一个服务器端的网页:
![](https://img.haomeiwen.com/i1368762/9506bb24ae221410.png)
-(UIWebView*)webview
{
if(!_webview) {
_webview = [[UIWebViewalloc] init];
_webview.scalesPageToFit=YES;
_webview.delegate=self;
NSURL*url =[NSURLURLWithString:self.urlString];
NSURLRequest*request =[NSURLRequestrequestWithURL:url];
[_webview loadRequest:request];
}
return_webview;
}
像这样加载一个本地网页:
![](https://img.haomeiwen.com/i1368762/73fd41eb5326bbef.png)
![](https://img.haomeiwen.com/i1368762/f612f63cc369a7d3.png)
- (UIWebView*)webView
{
if(!_webView) {
_webView = [[UIWebViewalloc] init];
_webView.scalesPageToFit=YES;
_webView.delegate=self;
NSString*resourcePath = [[[NSBundlemainBundle] bundlePath] stringByAppendingString:@"/LocalWeb"];
NSString*filePath = [resourcePath stringByAppendingPathComponent:@"index.html"];
NSString*htmlstring=[[NSStringalloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:nil];
[_webView loadHTMLString:htmlstring baseURL:[NSURLfileURLWithPath:resourcePath]];
}
return_webView;
}
注意:如果是载入本地网页在添加文件夹时应选择 Create folder references,而不是 Create groups 创建所谓的逻辑文件夹。
iOS Native 与 HTML5 之间的交互
Html5的有很多优点,比如开发速度快,app上线也可以随意修改免审核,跨平台,效果也不错。第一次听说这个混合式开发还是在大众点评的一次沙龙视频上,慢慢的,变得越来越流行。Cordova和它的前身PhoneGap,国内的WebViewJavascriptBridge都是很好的混合开发解决方案。如果传递的参数比较简单,功能不复杂的话,不用三方也可以很容易的实现。
Objective-C 调用 JavaScript
可以使用webview调用如下代码:
![](https://img.haomeiwen.com/i1368762/6bd1b91fb4a07997.png)
-(NSString*)stringByEvaluatingJavaScriptFromString:(NSString *)script;
这个方法向UIWebView传递一段需要执行的JavaScript代码最后获取执行结果。
比如做康师傅那个项目时,我需要点击Native的button获取网页上的文字,用来当邮件内容:
![](https://img.haomeiwen.com/i1368762/320e843787d9ce30.png)
//getEmailContent();就是js的方法名
//body就是getEmailContent方法返回的文字信息
NSString* body =[self.webViewstringByEvaluatingJavaScriptFromString:@"getEmailContent();"];
JavaScript 调用 Objective-C
实现点击网页上的按钮,调用原生的方法需要用到webview的一个代理:
1
![](https://img.haomeiwen.com/i1368762/ad4754fd5d6c94c3.png)
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
详细说一下调用流程:
点击按钮要JS发送像这样 yuefan://jump?invitingID=1 的一条协议给 native app,
然后app通过代理收到这个协议,就可以根据协议调用自身的方法了。
举个栗子:
App端
![](https://img.haomeiwen.com/i1368762/56790b0b3cb799b8.png)
- (BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType
{
NSURL * url = [request URL];
if([[url scheme]isEqualToString:@"yuefan"]) {
if([[url host]isEqualToString:@"jump"]) {
ShopDetailViewController * issuedVC = [[ShopDetailViewController alloc] init];
issuedVC.shopID = [[urlvalueForParameter:@"shopID"] intValue];
[self.navigationControllerpushViewController:issuedVCanimated:YES];
}
}
returnYES;
}
Html端
![](https://img.haomeiwen.com/i1368762/5cd10022b610f7fd.png)
测试网页
点击发送
网友评论