Skip to content

Commit 99066ba

Browse files
committed
Fix alert's presenting vc issue
1 parent 1b95b9f commit 99066ba

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

iOS_SDK/OneSignalSDK/Source/OneSignalDialogController.m

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ - (void)presentDialogWithTitle:(NSString * _Nonnull)title withMessage:(NSString
9090
}
9191

9292
- (void)displayDialog:(OSDialogRequest * _Nonnull)request {
93-
let rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
94-
93+
let visibleViewController = [OneSignalDialogController visibleViewController];
94+
9595
let controller = [UIAlertController alertControllerWithTitle:request.title message:request.message preferredStyle:UIAlertControllerStyleAlert];
9696

9797
[controller addAction:[UIAlertAction actionWithTitle:request.cancelTitle style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
@@ -106,8 +106,8 @@ - (void)displayDialog:(OSDialogRequest * _Nonnull)request {
106106
}]];
107107
}
108108
}
109-
110-
[rootViewController presentViewController:controller animated:true completion:nil];
109+
110+
[visibleViewController presentViewController:controller animated:true completion:nil];
111111
}
112112
#pragma clang diagnostic push
113113
#pragma clang diagnostic ignored "-Wdeprecated"
@@ -139,4 +139,23 @@ - (void)clearQueue {
139139
self.queue = [NSMutableArray new];
140140
}
141141

142+
+ (UIViewController *)visibleViewController {
143+
let rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
144+
return [OneSignalDialogController getVisibleViewControllerFrom:rootViewController];
145+
}
146+
147+
+ (UIViewController *) getVisibleViewControllerFrom:(UIViewController *) vc {
148+
if ([vc isKindOfClass:[UINavigationController class]]) {
149+
return [OneSignalDialogController getVisibleViewControllerFrom:[((UINavigationController *) vc) visibleViewController]];
150+
} else if ([vc isKindOfClass:[UITabBarController class]]) {
151+
return [OneSignalDialogController getVisibleViewControllerFrom:[((UITabBarController *) vc) selectedViewController]];
152+
} else {
153+
if (vc.presentedViewController) {
154+
return [OneSignalDialogController getVisibleViewControllerFrom:vc.presentedViewController];
155+
} else {
156+
return vc;
157+
}
158+
}
159+
}
160+
142161
@end

0 commit comments

Comments
 (0)