场景:项目中由于模块商店上类似微信通讯录的模块经常莫名闪退,所以需要原生提交一个模块供前端调用
学习历程:官方文档+视频
实践:
1.去官网下载模块开发sdk,找到ModulesDevProject,给予此进行模块开发,工程项目配置完全参照官方文档,在此就不多赘述
2.新建所需的类UZContactList继承于UZModule
#import "UZModule.h"
NS_ASSUME_NONNULL_BEGIN
@interface UZContactList : UZModule
@end
3.在.m中开始编写内容
3.1 导入工具类NSDictionaryUtils进行调取前端参数取值,导入UZAppUtils项目工具类对颜色等方法需要
3.2 原生代码编写
3.3 原生写方法提供给前端调用,并与前端交互:如下创建一个指定位置和大小的tabview:
-(void)open:(NSDictionary*)paramDict{
self.paramDict=paramDict;
float x=[paramDict floatValueForKey:@"x" defaultValue:0];
float y=[paramDict floatValueForKey:@"y" defaultValue:0];
float w=[paramDict floatValueForKey:@"w" defaultValue:0];
float h=[paramDict floatValueForKey:@"h" defaultValue:0];
self.tableView.frame=CGRectMake(x, y, w, h);
[self.view addSubview:self.tableView];
}
3.4回调
3.4.1回调过程:
A.前端回调原生:原生获取cbId,通过cbId建立桥梁进行回调
B.原生回调前端:原生把参数通过cbId传给前端
3.4.2回调示例:原生点击单元格,把参数通过cbId传前端
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
NSMutableDictionary *dic=[NSMutableDictionary dictionary];
dic[@"key"]=@"a";
dic[@"index"]=@(indexPath.row);
dic[@"clickType"]=@(0);
NSInteger cbId = [self.paramDict integerValueForKey:@"cbId" defaultValue:0];
[self sendResultEventWithCallbackId:cbId dataDict:dic errDict:nil doDelete:NO];
}
4.把方法名公开出来,提供给前端调用:
编辑module.json,示例:
[{
"name":"moduleDemo",
"class":"UZContactList",
"methods"["open","reloadData"]
}
]
5.打包上传
网友评论