Skip to content

Commit

Permalink
Fix Alert not showing in an app using UIScene
Browse files Browse the repository at this point in the history
Summary:
In an app using `UIScene`, `Alert` no longer pops up because the window
that gets created are not attached to a scene.

[iOS] [Fixed] - Fix `Alert` not showing in an app using `UIScene`
  • Loading branch information
tido64 committed Sep 1, 2022
1 parent 163171c commit 98e9a9c
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 33 deletions.
1 change: 0 additions & 1 deletion React/CoreModules/RCTAlertController.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,5 @@
@interface RCTAlertController : UIAlertController

- (void)show:(BOOL)animated completion:(void (^)(void))completion;
- (void)hide;

@end
30 changes: 1 addition & 29 deletions React/CoreModules/RCTAlertController.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,39 +9,11 @@

#import <React/RCTAlertController.h>

@interface RCTAlertController ()

@property (nonatomic, strong) UIWindow *alertWindow;

@end

@implementation RCTAlertController

- (UIWindow *)alertWindow
{
if (_alertWindow == nil) {
_alertWindow = [[UIWindow alloc] initWithFrame:RCTSharedApplication().keyWindow.bounds];
_alertWindow.rootViewController = [UIViewController new];
_alertWindow.windowLevel = UIWindowLevelAlert + 1;
}
return _alertWindow;
}

- (void)show:(BOOL)animated completion:(void (^)(void))completion
{
[self.alertWindow makeKeyAndVisible];
[self.alertWindow.rootViewController presentViewController:self animated:animated completion:completion];
}

- (void)hide
{
[_alertWindow setHidden:YES];

if (@available(iOS 13, *)) {
_alertWindow.windowScene = nil;
}

_alertWindow = nil;
[[RCTKeyWindow() rootViewController] presentViewController:self animated:animated completion:completion];
}

@end
3 changes: 0 additions & 3 deletions React/CoreModules/RCTAlertManager.mm
Original file line number Diff line number Diff line change
Expand Up @@ -185,20 +185,17 @@ - (void)invalidate
case RCTAlertViewStylePlainTextInput:
case RCTAlertViewStyleSecureTextInput:
callback(@[ buttonKey, [weakAlertController.textFields.firstObject text] ]);
[weakAlertController hide];
break;
case RCTAlertViewStyleLoginAndPasswordInput: {
NSDictionary<NSString *, NSString *> *loginCredentials = @{
@"login" : [weakAlertController.textFields.firstObject text],
@"password" : [weakAlertController.textFields.lastObject text]
};
callback(@[ buttonKey, loginCredentials ]);
[weakAlertController hide];
break;
}
case RCTAlertViewStyleDefault:
callback(@[ buttonKey ]);
[weakAlertController hide];
break;
}
}];
Expand Down

0 comments on commit 98e9a9c

Please sign in to comment.