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

时间:2010-09-14 00:42:57

标签: objective-c ios uiview

如何从app app delegate获取当前活动视图(用户当前正在查看的主视图)以供参考?

8 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:16)

所有最佳答案不适用于模态呈现的观点! 请改用此代码:

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

答案 2 :(得分:9)

这取决于您的应用的设置方式。

通常,您的应用委托会有一个主视图控制器属性,可以让您访问它。

获取您的应用代理

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

UIView *topView = appDelegate.viewController.view;

如果你的应用在app delegate中有导航控制器属性,你可以这样做。

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

答案 3 :(得分:1)

我找到了这个,对我来说对于所有类型的segue和视图控制器都很有用。

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

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

    return topViewController;
}

答案 4 :(得分:0)

您可以使用[appDelegate.navigationController.topViewController class]来记录控制器的类或获取title属性以了解它是哪一个。

答案 5 :(得分:0)

希望这有助于你

UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController;

if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
{
    return UIInterfaceOrientationMaskAll;
}
else
return UIInterfaceOrientationMaskPortrait;

答案 6 :(得分:0)

在app中的任何地方,您都可以获得rootViewController视图:

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

答案 7 :(得分:0)

尝试Eric's answer

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

    while (topController.presentedViewController) {
        topController = topController.presentedViewController;
    }

    return topController;
}