/// 自定义楼层组件注册
/// - Parameters:
/// - name: 组件标识
/// - clazz: 对应组件
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;
此方法需要在MADCore初始化方法回调内实现 例:
//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[MADCoreNativeManager registryNativeComponent:@"ComponentCellID" withClass:NSClassFromString(@"ComponentCellClass")];
}];
自定义组件需继承 MADCoreNativeCell 类 并且在组件中实现如下方法
//关联对应ID cell
+ (instancetype)cellWithType:(NSString *)type{
<#ClassCell#> *cell = [[<#ClassCell#> alloc] init];
return cell;
}
- (void)bindDataFromServer:(NSDictionary *)dataDict indexPath:(nonnull NSIndexPath *)indexPath{
//自定义试图
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
customView.backgroundColor = [UIColor orangeColor];
//将试图添加到cell内
[self addSubview:customView];
}
继承 MADCoreNativeCell 类后,可以获取对应的cell数据内容,可以通过 传输关联楼层数据 方法 dataDict 参数进行获取
/** ID */
@property (nonatomic , strong , readonly) NSString * ID;
/** 类型 */
@property (nonatomic , strong , readonly) NSString * type;
/** 标题 */
@property (nonatomic , strong , readonly) NSString * title;
/** 宽 */
@property (nonatomic , assign , readonly) CGFloat width;
/** 高 */
@property (nonatomic , assign , readonly) CGFloat height;
/** 背景色 */
@property (nonatomic , assign , readonly) UIColor * backGroundColor;
/** 背景图 */
@property (nonatomic , copy , readonly) UIImageView * backGroundImage;
/** 登录后是否要刷新 */
@property (nonatomic , assign , readonly) BOOL loginRefresh;
/** 登录状态 */
@property (nonatomic , assign , readonly) BOOL isLogin;
/** context */
@property (nonatomic , copy , readonly) id context;
当发交易或其他业务处理需改变楼层高度时,可调用下面方法,跟新cell的高度
/// 更新当前楼层高度
/// - Parameter height: 结算高度
- (void)updateForCellHeight:(CGFloat)height;
/// 自定义注册Page
/// - Parameters:
/// - name: PageView标识
/// - clazz: 对应PageView
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;
此方法需要在MADCore初始化方法回调内实现 例:
//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[MADCoreNativeManager registryNativeComponent:@"ComponentPageViewID" withClass:NSClassFromString(@"ComponentPageViewClass")];
}];
自定义首页容器需继承 NativeViewController 类 可以从 NativeViewController 类中得到关联的 场景ID 、标题 、 Context对象 、 路径
- (void)viewDidLoad {
NSLog(@"场景ID:%@",self.stageId);
NSLog(@"标题:%@",self.title);
NSLog(@"Context对象:%@",self.ctx);
NSLog(@"页面路径:%@",self.url);
}
自定义普通页容器需继承 MADBaseViewController 类 可以从 MADBaseViewController 类中得到关联的 场景ID 、标题 、 Context对象 、 路径
- (void)viewDidLoad {
NSLog(@"场景ID:%@",self.stageId);
NSLog(@"标题:%@",self.title);
NSLog(@"Context对象:%@",self.ctx);
NSLog(@"页面路径:%@",self.url);
}
包含 首页悬浮框 、 首页广告弹框 、 App应用版本更新弹框
/// 自定义注册Page
/// - Parameters:
/// - name: PageView标识
/// - clazz: 对应PageView
+ (void)registryNativeComponent:(NSString *)name withClass:(Class)clazz;
此方法需要在MADCore初始化方法回调内实现 例:
//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[MADCoreNativeManager registryNativeComponent:@"ComponentPageViewID" withClass:NSClassFromString(@"ComponentPageViewClass")];
}];
自定义容器需继承 MADCoreNativeView 类 并且在组件中实现如下方法
弹框的父试图是在 Window层 上
-(void)nativeViewBindDataFromServer:(NSDictionary *)dataDict{
//自定义试图
UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
customView.backgroundColor = [UIColor orangeColor];
//将试图添加到windowl内
[[[UIApplication sharedApplication].windows objectAtIndex:0] addSubview:customView];
}
/**
* 普通get方法请求后管资源数据
*
* @param url 请求网址路径
* @param success 成功回调
* @param fail 失败回调
*/
+ (void)GET:(NSString *)url success:(ResponseSuccess)success fail:(ResponseFail)fail;
/**
* 请求网络数据
*
* @param request 请求头
* @param parameters 请求参数
* @param response 返回内容
*/
+ (void)request:(NSMutableURLRequest *)request parameters:(NSDictionary *)parameters response:(void(^)(NSData *resBody, NSString *header, NSInteger code))response;
MADCoreNative 暴露 WorkerNetworking 类; 基于 MADP2.0 框架封装的网络请求
/// 动态卡资源请求
/// @param request 请求头
/// @param success 成功回调
/// @param fail 失败回调
+ (void)downloadWebRequest:(NSMutableURLRequest *)request success:(ResponseSuccess)success fail:(ResponseFail)fail;
/// ImageView配置mado图片
/// @param url 相对地址
/// @param imgV ImageView对象
+ (void)setImagWithUrl:(NSString *)url imageV:(UIImageView *)imgV;
h5动态卡可获取后管当前动态卡楼层的组件排序
getDynamicCardItemComponentList
用户在原生实现主题换肤功能是,动态卡获取到当前主题的ID
getNativeThemeID
MADCoreNative通过注入Schema的形式,以显示Web端与Native端的交互方式
#import <MADCore/MADCore.h"
JSBRIDGE_PLUGIN_REGEDITER(<#这里输入你当前的类名#>)
CSIIJSBridgeProtocol
-(void)registerBridge:(CSII_WKWebViewJavascriptBridge *)bridge bridgeObject:(CSII_WKWebViewBridgeObject *)bridgeObject{
}
其中CSII_WKWebViewBridgeObject对象中暴露当前控制器、context对象以及webview控件
#import <MADCore/MADCore.h>
JSBRIDGE_PLUGIN_REGEDITER(MADPCustomBridge)
@implementation MADPCustomBridge
-(void)registerBridge:(CSII_WKWebViewJavascriptBridge *)bridge bridgeObject:(CSII_WKWebViewBridgeObject *)bridgeObject{
/**
* 其中 customMethod为方法名
* hanler内的data为前端传递的参数数据
* responseCallback为客户端需要返回的状态和参数数据
* 如 - (void)customMethod:(id)param1 :(id)param2
*/
[bridge registerHandler:@"customMethod" handler:^(id data, WVJBResponseCallback responseCallback) {
if (![data isKindOfClass:[NSString class]]) {
if (responseCallback) {
responseCallback([self jsonStrWithObject:@{@"errMsg":@"参数不合法,请传json字符串!",@"state":@"fail"}]);
return;
}
}
NSData *jsonData = [data dataUsingEncoding:NSUTF8StringEncoding];
if (jsonData) {
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
// customMethod 为方法名;jsonData为Web端传递过来的参数
..... 数据处理 调用方法
// 返回给Web端
NSDictionary *callbackDic = @{@"state":@"success",@"data":data};
responseCallback([self jsonStrWithObject:callbackDic]);
}
}];
}
#pragma mark dic->json
- (NSString *)jsonStrWithObject:(id)object
{
NSData *data=[NSJSONSerialization dataWithJSONObject:object options:NSJSONWritingPrettyPrinted error:nil];
NSString *jsonStr=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
return jsonStr;
}
在所需之处调用方法[MADCoreNativeManager checkAppVersion];
。
MADP SDK暴露首页的容器类
MADCorePageViewController
客户端创建容器CustomHomeViewController
继承于MADP提供的MADCorePageViewController
类
在MADP初始化时注册容器兹定于的容器
//madp 初始化配置
MADCoreConfig *config = [MADCoreConfig new];
config.weexLog = WXLogLevelInfo;
[MADEngine initEnvironmentWithMADCoreConfig:config callback:^{
[MADCoreNativeManager registryNativeComponent:@"PageVC1" withClass:NSClassFromString(@"CustomHomeViewController")];
}];
此时可以在刚创建的容器中做一些对应的业务处理
注意:MADP首页使用的是同一个
MADCorePageViewController
类,所以像首页
、生活
、我的
、理财
等首页都会触发此容器!需要在当前容器做了对应页面的判断处理
- (void)viewDidLoad {
[super viewDidLoad];
if ([self.title isEqualToString:@"首页"]) {
// 首页业务逻辑处理 ....
}
MADP SDK在首页暴露属性楼层数据的接口
调用此方法可以触发当且页面所有的楼层内刷新接口
/// 刷新楼层数据
/// - Parameters:
/// - dataDict: 后管配置数据
/// - indexPath: indexPath
/// - flag: 标识
- (void)reloadData:(NSDictionary *)dataDict indexPath:(NSIndexPath *)indexPath isRefreshFlag:(NSString *)flag;
// 刷新数据
- (void)reloadData;
调用此方法可以刷新指定indexFlag为标识的对应楼层数据,需要在楼层reloadData:indexPath:isRefreshFlag
方法内取判断对应的indexFlag标识
/// 刷新以indexFlag为标识的对应楼层数据
- (void)reloadRowsAtIndexFlag:(NSString *)indexFlag;
调用此方法可以通知指定indexFlag为标识的对应楼层,需要在楼层transmitData:isRefreshFlag
方法内取判断对应的indexFlag标识,并且会携带参数数据!
/// 刷新以indexFlag为标识的对应楼层并传递数据
- (void)reloadRowsWithDataDict:(NSDictionary *)dataDict indexFlag:(NSString *)indexFlag;