好吧 今天继续再来搞搞 这个 交互的问题
OC 怎样可以拦截到 JS 的调用,或者说 JS 怎样调用 才能让 OC
首先来一段预备的 html 需要的代码
这小段代码很简单,点击了一下 然后调用了 一个方法
<a href="#" id="test">JS call OC</a>
<style>
a {
display: block;
width: 100px;
height: 50px;
text-align: center;
background: red;
color: #fff;
line-height: 50px;
text-decoration: none;
}
</style>
<script>
document.getElementById('test').onclick = function(){
//这两个方法 在JS 的 javascript 里面是没有的,这两个告诉OC 来做拦截的,看后面的代码就知道
login();
loginWithArg('xixi');
}
那么在OC 的代码里面是 这样写
//这两个方法对应上面的 JS 的两个调用方法
self.context[@"login"] =
^()
{
NSLog(@"do login");
};
self.context[@"loginWithArg"] =
^(id object)
{
NSLog(@"do login with Arg : %@",object);
};
附上图片
JS_OC.png在上一遍文字的基础上面 我们也可以这么干
是领用那个 我们自己定义出来的IOS_Obj 这个类
GO
先看看JS 怎样调用先
document.getElementById('test').onclick = function(){
//JS 的调用 请对应看下面的 IOS_Obj 的写法
IOS_Obj.login();
IOS_Obj.login2('嘻嘻');
//以下这两个方法是一样的 ,看下面的对象解说
IOS_Obj.login3AndTwoArg('哈哈','嘻嘻嘻');
IOS_Obj.abc('嘻嘻A','哈哈B');
}
跟着再看看 IOS_Obj 里面的 JSExportForIOS 怎样定义
h 文件:
@protocol JSExportForIOS <JSExport>
// IOS_Obj.login();
-(void) login;
// IOS_Obj.login2('嘻嘻');
-(void) login2:(NSString *)arg1;
//IOS_Obj.login3AndTwoArg('哈哈','嘻嘻嘻'); 这个是要特别注意的,在多参数的时候 第二个参数的描述 要大写开头 不能写成 andTwoArg , 小写的开头是检测不到的
-(void) login3:(NSString *)arg AndTwoArg:(NSString *)arg2;
//当你看完上面的 这个方法这么长,JS 可能就会嫌弃 为什么你们iOS这么长的,能不能简短一点,跟安卓一样啊? 答:可以 ,我们可以使用 JSExportAs 来进行一个别名的处理。
JSExportAs(abc, -(void) login3:(NSString *)arg AndTwoArg:(NSString *)arg2);
@end
@interface IOS_Obj : NSObject<JSExportForIOS>
m文件 :
-(void) login
{
NSLog(@"oc login xixi");
}
-(void) login2:(NSString *)arg1
{
NSLog(@"oc login arg:%@",arg1);
}
-(void) login3:(NSString *)arg1 AndTwoArg:(NSString *)arg2
{
NSLog(@"oc login arg:%@ arg2:%@",arg1,arg2);
}
输出如下
JS_OC_OBJECT.png
网友评论