web-dev-qa-db-ja.com

アプリケーションのメインウィンドウを取得する

UIApplicationにはkeyWindowメソッドがありますが、アラートビューが表示されている場合、これはアプリケーションのメインウィンドウではなく、アラートビューのウィンドウを返します。

アプリのメインウィンドウを取得するにはどうすればよいですか?

30
Jonathan.

UIApplicationDelegateには通常、「メインウィンドウ」への参照があります。

[[[UIApplication sharedApplication] delegate] window];

さらに、UIApplicationにはウィンドウの配列[[UIApplication sharedApplication] windows]

IApplication Class Reference を参照してください。

53
Espresso

私はこれがすべてのケースで機能することを100%確信しているわけではありませんが、これは機能するはずです:

UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];

ウィンドウは前後に並べられているため、メインウィンドウは常にインデックス0になります。

9
rmaddy

rmaddy's answer :のSwift 3.0バージョン

let window = UIApplication.shared.windows.first

また、iOS 8.0 UIAlertControllerUIAlertViewに置き換わっており、View Controllerであるため、新しいウィンドウが作成されるという問題に直面しなくなる可能性があることも追加する必要があります。

4
fpg1503
UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];

よくわかりませんが、これで解決するかもしれません。

3
RKY

Swiftの場合:

UIApplication.sharedApplication().delegate?.window
3
Glauco Neves

私にとってはpopViewControllerを提示していました

_self.presentViewController(popViewController, animated: true, completion: nil)
_

そして、このpopViewControllerのviewDidLoad()サブビューを追加していましたの場合、コンソールでエラーが発生し、バグが表示されます。それで、私はそれを機能させるために別の解決策を見つけなければなりません。お役に立てれば。

0
AnthonyR

スイフト3

    if let window = NSApplication.shared().windows.first {
        // you can now modify window attributes
    }
0
Ted Lowery