如何从应用程序委托中获取 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:从扩展委托获取复杂数据

如何从 iOS 应用程序中删除场景委托?

如何在 iOS 应用程序中从 Health 应用程序获取活动的唯一标识符?

来自应用委托的停止动画活动指示器