UIApplicationにはkeyWindow
メソッドがありますが、アラートビューが表示されている場合、これはアプリケーションのメインウィンドウではなく、アラートビューのウィンドウを返します。
アプリのメインウィンドウを取得するにはどうすればよいですか?
UIApplicationDelegate
には通常、「メインウィンドウ」への参照があります。
[[[UIApplication sharedApplication] delegate] window];
さらに、UIApplication
にはウィンドウの配列[[UIApplication sharedApplication] windows]
。
IApplication Class Reference を参照してください。
私はこれがすべてのケースで機能することを100%確信しているわけではありませんが、これは機能するはずです:
UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
ウィンドウは前後に並べられているため、メインウィンドウは常にインデックス0になります。
rmaddy's answer :のSwift 3.0バージョン
let window = UIApplication.shared.windows.first
また、iOS 8.0 UIAlertController
がUIAlertView
に置き換わっており、View Controllerであるため、新しいウィンドウが作成されるという問題に直面しなくなる可能性があることも追加する必要があります。
UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];
よくわかりませんが、これで解決するかもしれません。
Swiftの場合:
UIApplication.sharedApplication().delegate?.window
私にとってはpopViewController
を提示していました
_self.presentViewController(popViewController, animated: true, completion: nil)
_
そして、このpopViewControllerのviewDidLoad()
でサブビューを追加していましたの場合、コンソールでエラーが発生し、バグが表示されます。それで、私はそれを機能させるために別の解決策を見つけなければなりません。お役に立てれば。
スイフト3
if let window = NSApplication.shared().windows.first {
// you can now modify window attributes
}