diff --git a/React/CoreModules/RCTAlertController.m b/React/CoreModules/RCTAlertController.m index 36730b4c05491d..3387a6e8d97c04 100644 --- a/React/CoreModules/RCTAlertController.m +++ b/React/CoreModules/RCTAlertController.m @@ -20,14 +20,21 @@ @implementation RCTAlertController - (UIWindow *)alertWindow { if (_alertWindow == nil) { - UIWindow *keyWindow = RCTSharedApplication().keyWindow; - if (keyWindow) { - _alertWindow = [[UIWindow alloc] initWithFrame:keyWindow.bounds]; + _alertWindow = [self getUIWindowFromScene]; + + if (_alertWindow == nil) { + UIWindow *keyWindow = RCTSharedApplication().keyWindow; + if (keyWindow) { + _alertWindow = [[UIWindow alloc] initWithFrame:keyWindow.bounds]; + } else { + // keyWindow is nil, so we cannot create and initialize _alertWindow + NSLog(@"Unable to create alert window: keyWindow is nil"); + } + } + + if (_alertWindow) { _alertWindow.rootViewController = [UIViewController new]; _alertWindow.windowLevel = UIWindowLevelAlert + 1; - } else { - // keyWindow is nil, so we cannot create and initialize _alertWindow - NSLog(@"Unable to create alert window: keyWindow is nil"); } } @@ -56,4 +63,17 @@ - (void)hide _alertWindow = nil; } +- (UIWindow *)getUIWindowFromScene +{ + if (@available(iOS 13.0, *)) { + for (UIScene *scene in RCTSharedApplication().connectedScenes) { + if (scene.activationState == UISceneActivationStateForegroundActive && + [scene isKindOfClass:[UIWindowScene class]]) { + return [[UIWindow alloc] initWithWindowScene:(UIWindowScene *)scene]; + } + } + } + return nil; +} + @end