How to find topmost view controller on iOS

后端 未结 30 2375
遥遥无期
遥遥无期 2020-11-22 08:40

I\'ve run into a couple of cases now where it would be convenient to be able to find the \"topmost\" view controller (the one responsible for the current view), but haven\'t

30条回答
  •  醉酒成梦
    2020-11-22 09:04

    Here is what worked for me.

    I found that sometimes the controller was nil on the key window, as the keyWindow is some OS thing like an alert, etc.

     + (UIViewController*)topMostController
     {
         UIWindow *topWndow = [UIApplication sharedApplication].keyWindow;
         UIViewController *topController = topWndow.rootViewController;
    
         if (topController == nil)
         {
             // The windows in the array are ordered from back to front by window level; thus,
             // the last window in the array is on top of all other app windows.
             for (UIWindow *aWndow in [[UIApplication sharedApplication].windows reverseObjectEnumerator])
             {
                 topController = aWndow.rootViewController;
                 if (topController)
                     break;
             }
         }
    
         while (topController.presentedViewController) {
             topController = topController.presentedViewController;
         }
    
         return topController;
     }
    

提交回复
热议问题