diff --git a/React/Views/RCTModalHostView.h b/React/Views/RCTModalHostView.h index 880b24c9a48..01d38615400 100644 --- a/React/Views/RCTModalHostView.h +++ b/React/Views/RCTModalHostView.h @@ -16,7 +16,7 @@ @protocol RCTModalHostViewInteractor; -@interface RCTModalHostView : UIView +@interface RCTModalHostView : UIView @property (nonatomic, copy) NSString *animationType; @property (nonatomic, assign) UIModalPresentationStyle presentationStyle; diff --git a/React/Views/RCTModalHostView.m b/React/Views/RCTModalHostView.m index fa9aae7a2c1..bea9e08af96 100644 --- a/React/Views/RCTModalHostView.m +++ b/React/Views/RCTModalHostView.m @@ -24,6 +24,7 @@ RCTTouchHandler *_touchHandler; UIView *_reactSubview; UIInterfaceOrientation _lastKnownOrientation; + RCTDirectEventBlock _onRequestClose; } RCT_NOT_IMPLEMENTED(-(instancetype)initWithFrame : (CGRect)frame) @@ -57,6 +58,18 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : coder) } } +- (void)setOnRequestClose:(RCTDirectEventBlock)onRequestClose +{ + _onRequestClose = onRequestClose; +} + +- (void)presentationControllerDidAttemptToDismiss:(UIPresentationController *)controller +{ + if (_onRequestClose != nil) { + _onRequestClose(nil); + } +} + - (void)notifyForOrientationChange { if (!_onOrientationChange) { @@ -169,6 +182,9 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : coder) if (self.presentationStyle != UIModalPresentationNone) { _modalViewController.modalPresentationStyle = self.presentationStyle; } + if (@available(iOS 13.0, *)) { + _modalViewController.presentationController.delegate = self; + } [_delegate presentModalHostView:self withViewController:_modalViewController animated:[self hasAnimationType]]; _isPresented = YES; } diff --git a/React/Views/RCTModalHostViewManager.m b/React/Views/RCTModalHostViewManager.m index 7ca197d5866..80342bac8dd 100644 --- a/React/Views/RCTModalHostViewManager.m +++ b/React/Views/RCTModalHostViewManager.m @@ -121,6 +121,7 @@ RCT_EXPORT_VIEW_PROPERTY(identifier, NSNumber) RCT_EXPORT_VIEW_PROPERTY(supportedOrientations, NSArray) RCT_EXPORT_VIEW_PROPERTY(onOrientationChange, RCTDirectEventBlock) RCT_EXPORT_VIEW_PROPERTY(visible, BOOL) +RCT_EXPORT_VIEW_PROPERTY(onRequestClose, RCTDirectEventBlock) // Fabric only RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)