Skip to main content
AI Assist is now on Stack Overflow. Start a chat to get instant answers from across the network. Sign up to save and share your chats.
edited body
Source Link
JonasG
  • 9.3k
  • 12
  • 61
  • 88

This is an improvement to Eric's answer:

UIViewController *_topMostController(UIViewController *cont) { UIViewController *topController = cont; while (topController.presentedViewController) { topController = topController.presentedViewController; } if ([topController isKindOfClass:[UINavigationController class]]) { UIViewController *visible = ((UINavigationController *)topController).visibleViewController; if (visible) { topController = visible; } } return (topController != cont ? topController : nil); } UIViewController *topMostController() { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *next = nil; while ((next = _topMostController(topController)) != nil) { topController = next; } return topController; } 

_topMostController(UIViewController *cont) is a helper function.

Now all you need to do is call topMostController() and the very top most UIViewController should be returned!

This is an improvement to Eric's answer:

UIViewController *_topMostController(UIViewController *cont) { UIViewController *topController = cont; while (topController.presentedViewController) { topController = topController.presentedViewController; } if ([topController isKindOfClass:[UINavigationController class]]) { UIViewController *visible = ((UINavigationController *)topController).visibleViewController; if (visible) { topController = visible; } } return (topController != cont ? topController : nil); } UIViewController *topMostController() { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *next = nil; while ((next = _topMostController(topController)) != nil) { topController = next; } return topController; } 

_topMostController(UIViewController *cont) is a helper function.

Now all you need to do is call topMostController() and the very top UIViewController should be returned!

This is an improvement to Eric's answer:

UIViewController *_topMostController(UIViewController *cont) { UIViewController *topController = cont; while (topController.presentedViewController) { topController = topController.presentedViewController; } if ([topController isKindOfClass:[UINavigationController class]]) { UIViewController *visible = ((UINavigationController *)topController).visibleViewController; if (visible) { topController = visible; } } return (topController != cont ? topController : nil); } UIViewController *topMostController() { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *next = nil; while ((next = _topMostController(topController)) != nil) { topController = next; } return topController; } 

_topMostController(UIViewController *cont) is a helper function.

Now all you need to do is call topMostController() and the top most UIViewController should be returned!

Source Link
JonasG
  • 9.3k
  • 12
  • 61
  • 88

This is an improvement to Eric's answer:

UIViewController *_topMostController(UIViewController *cont) { UIViewController *topController = cont; while (topController.presentedViewController) { topController = topController.presentedViewController; } if ([topController isKindOfClass:[UINavigationController class]]) { UIViewController *visible = ((UINavigationController *)topController).visibleViewController; if (visible) { topController = visible; } } return (topController != cont ? topController : nil); } UIViewController *topMostController() { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; UIViewController *next = nil; while ((next = _topMostController(topController)) != nil) { topController = next; } return topController; } 

_topMostController(UIViewController *cont) is a helper function.

Now all you need to do is call topMostController() and the very top UIViewController should be returned!