参照のために、アプリデリゲートから現在アクティブなビュー(ユーザーが現在表示しているメインビュー)を取得するにはどうすればよいですか?
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIView *topView = window.rootViewController.view;
すべての上位回答モーダル表示ビューでは機能しません!代わりにこのコードを使用してください:
UIView * topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
アプリの設定方法によって異なります。
通常、アプリのデリゲートには、それに到達できるようにするメインビューコントローラープロパティがあります。
アプリのデリゲートを取得するには
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIView *topView = appDelegate.viewController.view;
アプリのアプリデリゲートにナビゲーションコントローラープロパティがある場合、次のようなことができます。
UIView *topView = appDelegate.navigationController.topViewController.view;
私はこれを見つけました、そしてそれはすべてのタイプのセグエとビューコントローラーのために私にとって素晴らしい働きをします。
+(UIViewController*) getTopController{
UIViewController *topViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topViewController.presentedViewController) {
topViewController = topViewController.presentedViewController;
}
return topViewController;
}
これがあなたを助けることを願っています
UINavigationController *navCnt = (UINavigationController *)self.window.rootViewController;
if([navCnt.topViewController isMemberOfClass:[WebViewController class]])
{
return UIInterfaceOrientationMaskAll;
}
else
return UIInterfaceOrientationMaskPortrait;
試してみてください エリックの答え :
+ (UIViewController*) topMostController
{
UIViewController *topController = [UIApplication sharedApplication].keyWindow.rootViewController;
while (topController.presentedViewController) {
topController = topController.presentedViewController;
}
return topController;
}
[appDelegate.navigationController.topViewController class]
を使用して、コントローラのクラスをログに記録するか、titleプロパティを取得して、それがどれであるかを確認します。
アプリのどこでも、rootViewControllerビューを次のように取得できます。
id<UIApplicationDelegate> appDelegate = [[UIApplication sharedApplication] delegate];
UIView *rootView = appDelegate.window.rootViewController.view;