एरिक के जवाब को पूरा करने के लिए (जो पॉपओवर, नेविगेशन कंट्रोलर, टैबबार कॉन्ट्रोलर, व्यू कंट्रोलर को ट्रैवर्सिंग करते समय कुछ अन्य व्यू कंट्रोलर के साथ साक्षात्कार के रूप में जोड़ा गया) को पूरा करने के लिए, यहां वर्तमान में दिखाई देने वाले दृश्य नियंत्रक को वापस करने का मेरा संस्करण है:
================================================== ===================
- (UIViewController*)topViewController {
return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}
- (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)viewController {
if ([viewController isKindOfClass:[UITabBarController class]]) {
UITabBarController* tabBarController = (UITabBarController*)viewController;
return [self topViewControllerWithRootViewController:tabBarController.selectedViewController];
} else if ([viewController isKindOfClass:[UINavigationController class]]) {
UINavigationController* navContObj = (UINavigationController*)viewController;
return [self topViewControllerWithRootViewController:navContObj.visibleViewController];
} else if (viewController.presentedViewController && !viewController.presentedViewController.isBeingDismissed) {
UIViewController* presentedViewController = viewController.presentedViewController;
return [self topViewControllerWithRootViewController:presentedViewController];
}
else {
for (UIView *view in [viewController.view subviews])
{
id subViewController = [view nextResponder];
if ( subViewController && [subViewController isKindOfClass:[UIViewController class]])
{
if ([(UIViewController *)subViewController presentedViewController] && ![subViewController presentedViewController].isBeingDismissed) {
return [self topViewControllerWithRootViewController:[(UIViewController *)subViewController presentedViewController]];
}
}
}
return viewController;
}
}
================================================== ===================
और अब आप सभी को शीर्ष सबसे अधिक देखने के लिए नियंत्रक की आवश्यकता है, उपरोक्त विधि को इस प्रकार कहें:
UIViewController *topMostViewControllerObj = [self topViewController];