web-dev-qa-db-ja.com

アプリデリゲートからiOSアプリケーションのアクティブビューを取得する方法?

参照のために、アプリデリゲートから現在アクティブなビュー(ユーザーが現在表示しているメインビュー)を取得するにはどうすればよいですか?

24
David
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
34
phatmann

すべての上位回答モーダル表示ビューでは機能しません!代わりにこのコードを使用してください:

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

16
skywinder

アプリの設定方法によって異なります。

通常、アプリのデリゲートには、それに到達できるようにするメインビューコントローラープロパティがあります。

アプリのデリゲートを取得するには

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

UIView *topView = appDelegate.viewController.view;

アプリのアプリデリゲートにナビゲーションコントローラープロパティがある場合、次のようなことができます。

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

私はこれを見つけました、そしてそれはすべてのタイプのセグエとビューコントローラーのために私にとって素晴らしい働きをします。

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

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

    return topViewController;
}
1
mdimarca

これがあなたを助けることを願っています

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

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

試してみてください エリックの答え

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

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

    return topController;
}
0
Hsm

[appDelegate.navigationController.topViewController class]を使用して、コントローラのクラスをログに記録するか、titleプロパティを取得して、それがどれであるかを確認します。

0
Farrukh Javeid

アプリのどこでも、rootViewControllerビューを次のように取得できます。

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