From dd27b07c5678999d72fc7cdb9f176935dfef7183 Mon Sep 17 00:00:00 2001 From: jianhan-he <41508406+jianhan-he@users.noreply.github.com> Date: Wed, 9 Jan 2019 10:27:09 +0800 Subject: [PATCH] [iOS]support viewappear and viewdisappear event on eagle (#2020) --- ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h | 2 +- ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm | 5 +++-- ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m | 9 +-------- ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m | 11 ++++++++++- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h index ca5fd83fa1..0c570995d6 100644 --- a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h +++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.h @@ -197,7 +197,7 @@ namespace WeexCore + (void)callUpdateFinish:(NSString*)pageId; -+ (void)fireEvent:(NSString *)pageId ref:(NSString *)ref event:(NSString *)event args:(NSDictionary *)args; ++ (void)fireEvent:(NSString *)pageId ref:(NSString *)ref event:(NSString *)event args:(NSDictionary *)args domChanges:(NSDictionary *)domChanges; + (void)registerModules:(NSDictionary *)modules; diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm index 1e2c331e33..7838a8e127 100644 --- a/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm +++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCoreBridge.mm @@ -790,11 +790,12 @@ + (void)refreshDataRenderInstance:(NSString *)pageId data:(NSString *)data; node_manager->RefreshPage([pageId UTF8String] ?: "", [data UTF8String] ?: ""); } -+ (void)fireEvent:(NSString *)pageId ref:(NSString *)ref event:(NSString *)event args:(NSDictionary *)args ++ (void)fireEvent:(NSString *)pageId ref:(NSString *)ref event:(NSString *)event args:(NSDictionary *)args domChanges:(NSDictionary *)domChanges { NSString *params = [WXUtility JSONString:args]; + NSString* nsDomChanges = [WXUtility JSONString:domChanges]; auto vnode_manager = weex::core::data_render::VNodeRenderManager::GetInstance(); - vnode_manager->FireEvent([pageId UTF8String] ? : "", [ref UTF8String] ? : "", [event UTF8String] ? : "", [params UTF8String] ? : "", ""); + vnode_manager->FireEvent([pageId UTF8String] ? : "", [ref UTF8String] ? : "", [event UTF8String] ? : "", [params UTF8String] ? : "", [nsDomChanges UTF8String] ? : ""); } + (void)registerModules:(NSDictionary *)modules { diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m index c98ba3810c..a75f51f4ea 100644 --- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m +++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m @@ -166,14 +166,7 @@ - (void)fireEvent:(NSString *)eventName params:(NSDictionary *)params domChanges NSArray *handlerArguments = [self _paramsForEvent:eventName]; NSString *ref = _templateComponent ? _templateComponent.ref : self.ref; - if (self.weexInstance.dataRender) { - WXPerformBlockOnComponentThread(^{ - [WXCoreBridge fireEvent:self.weexInstance.instanceId ref:ref event:eventName args:dict]; - }); - } - else { - [[WXSDKManager bridgeMgr] fireEvent:self.weexInstance.instanceId ref:ref type:eventName params:dict domChanges:domChanges handlerArguments:handlerArguments]; - } + [[WXSDKManager bridgeMgr] fireEvent:self.weexInstance.instanceId ref:ref type:eventName params:dict domChanges:domChanges handlerArguments:handlerArguments]; } - (NSString *)recursiveFindTemplateIdWithComponent:(WXComponent *)component diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m index 0161dd5f96..afd1f3ded2 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m +++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m @@ -31,6 +31,8 @@ #import "WXMonitor.h" #import "WXSDKInstance_performance.h" #import "WXThreadSafeMutableArray.h" +#import "WXComponentManager.h" +#import "WXCoreBridge.h" @interface WXBridgeManager () @@ -411,6 +413,14 @@ - (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)ty - (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)type params:(NSDictionary *)params domChanges:(NSDictionary *)domChanges handlerArguments:(NSArray *)handlerArguments { + WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId]; + if (instance.dataRender) { + WXPerformBlockOnComponentThread(^{ + [WXCoreBridge fireEvent:instanceId ref:ref event:type args:params?:@{} domChanges:domChanges?:@{}]; + }); + return; + } + if (!type || !ref) { WXLogError(@"Event type and component ref should not be nil"); return; @@ -422,7 +432,6 @@ - (void)fireEvent:(NSString *)instanceId ref:(NSString *)ref type:(NSString *)ty [newArgs addObject:@{@"params":handlerArguments}]; args = newArgs; } - WXSDKInstance *instance = [WXSDKManager instanceForID:instanceId]; if(instance && !instance.isJSCreateFinish) {