AppDelegateクラスでタップバーに追加したアクティビティビューがあります。
[self.mainTabBar.view addSubview: spinner];
接続に問題がある場合は、各View Controllerに表示され、回転しています。特定のビューコントローラーにいくつかのボタンがあり、いくつかのモーダルビューコントローラーを表示します。そのモーダルビューコントローラーはスピナーと重なります。そのスピナーを常にすべてのビューの上に、または少なくともそのモーダルビューコントローラーの上に配置する方法は?私はモーダルビューコントローラーを提示するビューコントローラーでそのようなことを作ろうとしました:
[self presentModalViewController:selectionViewController animated:YES];
[self.view bringSubviewToFront:[self.tabBarController.view viewWithTag:15]];
動作しません。
メインウィンドウにビューを追加します。
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
[mainWindow addSubview: spinner];
Phix23の答えは正しいですが、これはより完全な例です:
//The view you want to present
UIViewController *viewControllerYouWantToPresentOnTop = [[UIViewController alloc] initWithNibName:nil bundle:nil];
//Create transparent Host view for presenting the above view
UIWindow* mainWindow = [[UIApplication sharedApplication] keyWindow];
UIViewController *viewControllerForPresentation = [[UIViewController alloc] init];
[[viewControllerForPresentation view] setBackgroundColor:[UIColor clearColor]];
[[viewControllerForPresentation view] setOpaque:FALSE];
[mainWindow addSubview:[viewControllerForPresentation view]];
//Make your transparent view controller present your actual view controller
[viewControllerForPresentation presentViewController:viewControllerYouWantToPresentOnTop animated:TRUE];
これらが不要になった場合は、自分でクリーンアップすることを忘れないでください。
このコードはアプリのどこからでも使用できます。
アプリは通常、その存続期間を通じて1つのウィンドウ内にコンテンツを表示します。しかし、他のすべての上にコンテンツを追加するために追加のウィンドウが使用される場合があります。 Appleは、別のウィンドウに追加することにより、UIAlertView
が常に一番上に留まるようにします。
UIView *contentView = [[UIView alloc] initWithFrame:contentFrame];
contentView.backgroundColor = [UIColor greenColor];
UIWindow *window = [[UIWindow alloc] initWithFrame:CGRectMake(x,y,contentFrame.size.width, contentFrame.size.height)];
window.windowLevel = UIWindowLevelAlert;
[window addSubview:contentView];
[window makeKeyAndVisible];
必要に応じてwindow.hidden = Yes or No
を設定して、ウィンドウを表示または非表示にします。これにより、アプリ内の他のすべての上にcontentView
が常に表示されます。
モーダルコントローラーは完全に異なるレイヤーにあり、提示するコントローラーのサブビューを重ねて表示することはできません。
内部にスピナーを備えたUIAlertView
を使用します。アラートは、モーダルコントローラーでさえ重なるレイヤーに表示されます。