@@ -248,6 +248,25 @@ - (UIWindow*) keyWindow {
248248 return nil ;
249249}
250250
251+ /* *
252+ Find the top view controller that is not of type UINavigationController or UITabBarController
253+ */
254+ - (UIViewController *)topViewController : (UIViewController *)baseViewController {
255+ if ([baseViewController isKindOfClass: [UINavigationController class ]]) {
256+ return [self topViewController: ((UINavigationController *)baseViewController).visibleViewController];
257+ }
258+
259+ if ([baseViewController isKindOfClass: [UITabBarController class ]]) {
260+ return [self topViewController: ((UITabBarController *)baseViewController).selectedViewController];
261+ }
262+
263+ if ([baseViewController presentedViewController ] != nil ) {
264+ return [self topViewController: [baseViewController presentedViewController ]];
265+ }
266+
267+ return baseViewController;
268+ }
269+
251270- (BOOL ) willLoadViewControllerWithURL : (NSURL *)matchURL {
252271 if (self.primaryWindow ) return NO ;
253272
@@ -291,11 +310,13 @@ - (BOOL) willLoadViewControllerWithURL:(NSURL*)matchURL {
291310 self.matchView .alpha = 1.0 ;
292311 [self .matchView addSubview: self .matchViewController.view];
293312
294- [self .primaryWindow.rootViewController addChildViewController: self .matchViewController];
295- UIView *parentView = self.primaryWindow .rootViewController .view ?: self.primaryWindow ;
313+ UIViewController *rootViewController = [self topViewController: self .primaryWindow.rootViewController];
314+
315+ [rootViewController addChildViewController: self .matchViewController];
316+ UIView *parentView = rootViewController.view ?: self.primaryWindow ;
296317 [parentView insertSubview: self .matchView atIndex: 0 ];
297318
298- [self .matchViewController didMoveToParentViewController: self .primaryWindow. rootViewController];
319+ [self .matchViewController didMoveToParentViewController: rootViewController];
299320
300321 return YES ;
301322}
0 commit comments