
Simulator Screen Shot 2017年2月10日 下午2.16.07.png
這是一個HTML頁面,需要我們做數(shù)據(jù)交互。
具體實現(xiàn)思路就是使用iOS的一個庫<JavaScriptCore/JavaScriptCore.h>做交互
創(chuàng)建一個ViewController,在.h文件中創(chuàng)建JSContext對象,
@property (nonatomic, strong) JSContext *jsContext;
寫一個自定義協(xié)議,協(xié)議中要實現(xiàn)的方法是HTML頁面中點擊觸發(fā)方法
@protocol JSObjectiveCDelegate <JSExport>
- (void)getMessage:(NSString *)user :(NSString *)psw;
//此方法就是HTML代碼中的約定方法;
創(chuàng)建一個js模型,通過模型調(diào)用方法更簡便
@interface JsObjCModel : NSObject <JSObjectiveCDelegate>
@property (nonatomic, weak) JSContext *jsContext;
在.m中調(diào)用webView的一個協(xié)議方法
- (void)webViewDidFinishLoad:(UIWebView *)webView{
// [webView stringByEvaluatingJavaScriptFromString:@"OCModel.callSystemCamera()"];
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
// 通過模型調(diào)用方法,這種方式更好些。
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模型,調(diào)用方法
@implementation JsObjCModel
- (void)getMessage:(NSString *)signName :(NSString *)signPass
{
//在這里寫代碼,實現(xiàn)你的數(shù)據(jù)交互就可以了;
}
注意:這個方法雖然是在ViewController.m中寫的,但是這是一個單獨的類,它不具有ViewController的屬性,所以有關(guān)于view的方法及屬性都是用不了的,這時可以添加通知解決。