如何从应用程序委托获取iOS应用程序中的活动视图?

我怎样才能从应用程序委托为参考的缘故得到当前活动的视图(目前正被用户查看的主视图)?

 UIWindow *window = [[UIApplication sharedApplication] keyWindow]; UIView *topView = window.rootViewController.view; 

所有最佳答案都不适用于模态呈现视图! 改用这个代码:

UIView * topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];

这取决于你的应用程序的设置。

通常情况下,您的应用程序委托将有一个主视图控制器属性,可以让你到达它。

获取您的应用程序委托

 MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; UIView *topView = appDelegate.viewController.view; 

如果您的应用程序在应用程序委托中具有导航控制器属性,则可以执行此类操作。

 UIView *topView = appDelegate.navigationController.topViewController.view; 

我发现这一点,它适用于所有types的赛格和视图控制器。

+(UIViewController *)getTopController {UIViewController * topViewController = [UIApplication sharedApplication] .keyWindow.rootViewController;

 while (topViewController.presentedViewController) { topViewController = topViewController.presentedViewController; } return topViewController; 

}

你可以使用[appDelegate.navigationController.topViewController class]logging控制器的类,或者获取title属性来知道它是哪一个。

希望这可以帮助你

 UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController; if([navCnt.topViewController isMemberOfClass:[WebViewController class]]) { return UIInterfaceOrientationMaskAll; } else return UIInterfaceOrientationMaskPortrait; 

在应用程序的任何地方,你可以得到你的rootViewController视图也是这样的:

 id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate]; UIView *rootView = appDelegate.window.rootViewController.view; 

试试Eric的回答 :

 + (UIViewController*) topMostController { UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController; while (topController.presentedViewController) { topController = topController.presentedViewController; } return topController; }