Let native modules know when root views get added and removed

This commit is contained in:
Pieter De Baets 2015-08-17 06:11:29 -07:00
parent 12d5f0d6f4
commit 65713992c4
2 changed files with 28 additions and 0 deletions

View File

@ -20,6 +20,23 @@
*/ */
RCT_EXTERN NSString *const RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification; RCT_EXTERN NSString *const RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification;
/**
* Posted whenever a new root view is registered with RCTUIManager. The userInfo property
* will contain a RCTUIManagerRootViewKey with the registered root view.
*/
RCT_EXTERN NSString *const RCTUIManagerDidRegisterRootViewNotification;
/**
* Posted whenever a root view is removed from the RCTUIManager. The userInfo property
* will contain a RCTUIManagerRootViewKey with the removed root view.
*/
RCT_EXTERN NSString *const RCTUIManagerDidRemoveRootViewNotification;
/**
* Key for the root view property in the above notifications
*/
RCT_EXTERN NSString *const RCTUIManagerRootViewKey;
@protocol RCTScrollableProtocol; @protocol RCTScrollableProtocol;
/** /**

View File

@ -41,6 +41,9 @@ static void RCTTraverseViewNodes(id<RCTComponent> view, void (^block)(id<RCTComp
} }
NSString *const RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification = @"RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification"; NSString *const RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification = @"RCTUIManagerWillUpdateViewsDueToContentSizeMultiplierChangeNotification";
NSString *const RCTUIManagerDidRegisterRootViewNotification = @"RCTUIManagerDidRegisterRootViewNotification";
NSString *const RCTUIManagerDidRemoveRootViewNotification = @"RCTUIManagerDidRemoveRootViewNotification";
NSString *const RCTUIManagerRootViewKey = @"RCTUIManagerRootViewKey";
@interface RCTAnimation : NSObject @interface RCTAnimation : NSObject
@ -331,6 +334,10 @@ extern NSString *RCTBridgeModuleNameForClass(Class cls);
strongSelf->_shadowViewRegistry[shadowView.reactTag] = shadowView; strongSelf->_shadowViewRegistry[shadowView.reactTag] = shadowView;
[strongSelf->_rootViewTags addObject:reactTag]; [strongSelf->_rootViewTags addObject:reactTag];
}); });
[[NSNotificationCenter defaultCenter] postNotificationName:RCTUIManagerDidRegisterRootViewNotification
object:self
userInfo:@{ RCTUIManagerRootViewKey: rootView }];
} }
- (UIView *)viewForReactTag:(NSNumber *)reactTag - (UIView *)viewForReactTag:(NSNumber *)reactTag
@ -637,6 +644,10 @@ RCT_EXPORT_METHOD(removeRootView:(nonnull NSNumber *)rootReactTag)
UIView *rootView = viewRegistry[rootReactTag]; UIView *rootView = viewRegistry[rootReactTag];
[uiManager _purgeChildren:rootView.reactSubviews fromRegistry:viewRegistry]; [uiManager _purgeChildren:rootView.reactSubviews fromRegistry:viewRegistry];
viewRegistry[rootReactTag] = nil; viewRegistry[rootReactTag] = nil;
[[NSNotificationCenter defaultCenter] postNotificationName:RCTUIManagerDidRemoveRootViewNotification
object:uiManager
userInfo:@{ RCTUIManagerRootViewKey: rootView }];
}]; }];
} }