获取应用程序的主窗口
UIApplication有一个方法keyWindow
,但是如果显示一个alert视图,那么这将返回警报视图的窗口而不是应用程序的主窗口。
我怎样才能得到应用程序的主窗口?
UIApplicationDelegate
通常有一个“主窗口”的引用:
[[[UIApplication sharedApplication] delegate] window];
此外, UIApplication
有一个窗口数组[[UIApplication sharedApplication] windows]
。
请参阅UIApplication类参考 。
我不是100%肯定这在任何情况下,但这应该工作:
UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
窗口排在前面,所以主窗口应该始终在索引0处。
UIApplication *application = [UIApplication sharedInstance]; NSarray *appWindows = [NSArray arrayWithArray:application.windows]; UIWindow *mainWindow = [appWindows objectAtIndex:0];
我不确定,但这可能有帮助。
在Swift中:
UIApplication.sharedApplication().delegate?.window
rmaddy的 Swift 3.0版的回答 :
let window = UIApplication.shared.windows.first
我还应该补充说,因为iOS 8.0 UIAlertController
已经取代了UIAlertView
并且作为一个视图控制器,您可能不再面临新build窗口的问题。
对我来说,我提出了一个popViewController
self.presentViewController(popViewController, animated: true, completion: nil)
然后在这个popViewController的viewDidLoad()
我添加一个子视图 ,这会导致在控制台中的错误和显示错误。 所以我必须find另一个解决scheme来使其工作。 希望这可以帮助。
Swift 3
if let window = NSApplication.shared().windows.first { // you can now modify window attributes }
Swift 3
class func sharedInstance() -> AppDelegate{ return UIApplication.shared.delegate as! AppDelegate }