เพื่อให้คำตอบของ Eric เสร็จสมบูรณ์(ผู้ที่ออกจาก popovers ตัวควบคุมการนำทาง tabbarcontrollers ดูตัวควบคุมที่เพิ่มเป็นมุมมองไปยังตัวควบคุมมุมมองอื่น ๆ ในขณะที่แวะเวียน) นี่คือเวอร์ชันของฉันที่ส่งคืนตัวควบคุมมุมมองที่มองเห็นได้
================================================== ===================
- (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];