这是一个HTML页面,需要我们做数据交互。
具体实现思路就是使用iOS的一个库<JavaScriptCore/JavaScriptCore.h>做交互
创建一个ViewController,在.h文件中创建JSContext对象,
@property (nonatomic, strong) JSContext *jsContext;
写一个自定义协议,协议中要实现的方法是HTML页面中点击触发方法
@protocol JSObjectiveCDelegate <JSExport>
- (void)getMessage:(NSString *)user :(NSString *)psw;
//此方法就是HTML代码中的约定方法;
创建一个js模型,通过模型调用方法更简便
@interface JsObjCModel : NSObject <JSObjectiveCDelegate>
@property (nonatomic, weak) JSContext *jsContext;
在.m中调用webView的一个协议方法
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// [webView stringByEvaluatingJavaScriptFromString:@"OCModel.callSystemCamera()"];
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 通过模型调用方法,这种方式更好些。
JsObjCModel *model = [[JsObjCModel alloc] init];
self.jsContext[@"jsObject"] = model;//这里的@"jsObject"是HTML代码中的js对象,注意保持一致
model.jsContext = self.jsContext;
model.webView = _web;
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
NSLog(@"异常信息:%@", exceptionValue);
};
}
这是HTML代码中的约定方法
<script>
function logIn(){
var logName = $("#u").val();
var logPass = $("#p").val();
var logObj = jsObject.getMessage(logName,logPass);
}
</script>
在.m中加入js模型,调用方法
@implementation JsObjCModel
- (void)getMessage:(NSString *)signName :(NSString *)signPass
{
//在这里写代码,实现你的数据交互就可以了;
}
注意:这个方法虽然是在ViewController.m中写的,但是这是一个单独的类,它不具有ViewController的属性,所以有关于view的方法及属性都是用不了的,这时可以添加通知解决。