如何从应用程序委托获取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; }