如何从应用程序委托中获取 iOS 应用程序中的活动视图?
Posted
技术标签:
【中文标题】如何从应用程序委托中获取 iOS 应用程序中的活动视图?【英文标题】:How to get the active view in an iOS application from the app delegate? 【发布时间】:2010-09-14 00:42:57 【问题描述】:我如何从应用委托中获取当前活动视图(用户当前正在查看的主视图)以供参考?
【问题讨论】:
定义“主视图”。屏幕上可能同时出现多个UIView
对象(和子类)。你希望得到哪一个?
假设用户当前正在屏幕上执行特定操作,我想获取该屏幕的容器视图的视图控制器
您必须自己跟踪。与视图一样,屏幕上可能有多个处于活动状态的视图控制器。
【参考方案1】:
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
【讨论】:
【参考方案2】:所有热门答案不适用于模态呈现的视图! 请改用此代码:
UIView * topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
【讨论】:
【参考方案3】:这取决于您的应用是如何设置的。
通常情况下,您的应用代理将具有一个主视图控制器属性,可让您访问它。
获取您的应用委托
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIView *topView = appDelegate.viewController.view;
如果您的应用在应用委托中有导航控制器属性,您可以执行以下操作。
UIView *topView = appDelegate.navigationController.topViewController.view;
【讨论】:
第三行给我一个错误:在“kzAppDelegate”类型的对象上找不到属性“navigationController” 你可能没有使用导航控制器。看我回答的第二行代码。【参考方案4】:我发现了这个,它适用于所有类型的 segue 和视图控制器。
+(UIViewController*) getTopController
UIViewController *topViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topViewController.presentedViewController)
topViewController = topViewController.presentedViewController;
return topViewController;
【讨论】:
【参考方案5】:您可以使用[appDelegate.navigationController.topViewController class]
记录控制器的类或获取标题属性以了解它是哪一个。
【讨论】:
【参考方案6】:希望对你有帮助
UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController;
if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
return UIInterfaceOrientationMaskAll;
else
return UIInterfaceOrientationMaskPortrait;
【讨论】:
【参考方案7】:在应用程序的任何地方,您都可以像这样获取 rootViewController 视图:
id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
UIView *rootView = appDelegate.window.rootViewController.view;
【讨论】:
【参考方案8】:试试Eric's answer:
+ (UIViewController*) topMostController
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController)
topController = topController.presentedViewController;
return topController;
【讨论】:
以上是关于如何从应用程序委托中获取 iOS 应用程序中的活动视图?的主要内容,如果未能解决你的问题,请参考以下文章
iOS 中的基本表格程序 - 如何告诉我的表格从应用程序委托重新加载数据?
当 iOS 应用程序从非活动/挂起状态被召回时,何时刷新视图
WatchKit Complication:从扩展委托获取复杂数据