Как получить активный вид в приложении iOS от делегата приложения? - PullRequest
21 голосов
/ 14 сентября 2010

как я могу получить текущий активный вид (основной вид, который в данный момент просматривает пользователь) из делегата приложения для ссылок?

Ответы [ 8 ]

32 голосов
/ 31 мая 2013
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
16 голосов
/ 12 августа 2014

Все топовые ответы не работает с модальными представлениями! Используйте этот код вместо:

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

9 голосов
/ 02 ноября 2011

Это зависит от того, как настроено ваше приложение.

Как правило, у вашего делегата приложения будет свойство контроллера основного вида, которое позволит вам добраться до него.

Чтобы получить делегата приложения

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

UIView *topView = appDelegate.viewController.view;

Если у вашего приложения есть свойство контроллера навигации в делегате приложения, вы можете сделать что-то вроде этого.

UIView *topView = appDelegate.navigationController.topViewController.view;
1 голос
/ 13 января 2017

Я нашел это, и он отлично работает для меня для всех типов сегментов и контроллеров представления.

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

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

    return topViewController;
}
0 голосов
/ 02 февраля 2017

Попробуйте Ответ Эрика :

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

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

    return topController;
}
0 голосов
/ 22 января 2014

В любом месте приложения вы можете получить свой rootViewController. Смотрите также так:

id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
UIView *rootView = appDelegate.window.rootViewController.view;
0 голосов
/ 28 мая 2013

Надеюсь, это поможет вам

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

if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
{
    return UIInterfaceOrientationMaskAll;
}
else
return UIInterfaceOrientationMaskPortrait;
0 голосов
/ 12 июня 2012

вы можете использовать [appDelegate.navigationController.topViewController class], чтобы зарегистрировать класс контроллера или получить свойство title, чтобы узнать, какой это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...