diff --git a/React/Base/RCTBridgeModule.h b/React/Base/RCTBridgeModule.h index 971973a9b33..ae2066f16f4 100644 --- a/React/Base/RCTBridgeModule.h +++ b/React/Base/RCTBridgeModule.h @@ -437,6 +437,8 @@ typedef NSURL * (^RCTBridgelessBundleURLGetter)(void); typedef UIView * (^RCTBridgelessComponentViewProvider)(NSNumber *); +typedef void (^RCTViewRegistryUIBlock)(RCTViewRegistry *viewRegistry); + /** * A class that allows NativeModules to query for views, given React Tags. */ @@ -445,6 +447,7 @@ typedef UIView * (^RCTBridgelessComponentViewProvider)(NSNumber *); - (void)setBridgelessComponentViewProvider:(RCTBridgelessComponentViewProvider)bridgelessComponentViewProvider; - (UIView *)viewForReactTag:(NSNumber *)reactTag; +- (void)addUIBlock:(RCTViewRegistryUIBlock)block; @end typedef void (^RCTBridgelessJSModuleMethodInvoker)( diff --git a/React/Base/RCTViewRegistry.m b/React/Base/RCTViewRegistry.m index f93275dc799..dc54d78c686 100644 --- a/React/Base/RCTViewRegistry.m +++ b/React/Base/RCTViewRegistry.m @@ -42,4 +42,28 @@ return view; } +- (void)addUIBlock:(RCTViewRegistryUIBlock)block +{ + if (!block) { + return; + } + + __weak __typeof(self) weakSelf = self; + if (_bridge) { + [_bridge.uiManager addUIBlock:^(RCTUIManager *uiManager, NSDictionary *viewRegistry) { + __typeof(self) strongSelf = weakSelf; + if (strongSelf) { + block(strongSelf); + } + }]; + } else { + RCTExecuteOnMainQueue(^{ + __typeof(self) strongSelf = weakSelf; + if (strongSelf) { + block(strongSelf); + } + }); + } +} + @end