获取应用程序的主窗口
Posted
技术标签:
【中文标题】获取应用程序的主窗口【英文标题】:Get Application's main window 【发布时间】:2013-07-24 17:40:43 【问题描述】:UIApplication 有一个方法keyWindow
,但是如果正在显示警报视图,那么这将返回警报视图的窗口,而不是应用程序的主窗口。
如何获取应用的主窗口?
【问题讨论】:
你能详细说明你在尝试什么吗..? 看看这个问题可能对你有帮助:- ***.com/questions/7871241/… 【参考方案1】:UIApplicationDelegate
通常引用“主窗口”:
[[[UIApplication sharedApplication] delegate] window];
此外,UIApplication
有一个窗口数组 [[UIApplication sharedApplication] windows]
。
请参阅UIApplication Class Reference。
【讨论】:
这对代表来说是可选的,不是吗?我希望有一种更“具体”的方式 [[[UIApplication shareApplication] delegate] window] -- 工作正常。【参考方案2】:我不是 100% 确定这在每种情况下都有效,但这应该有效:
UIWindow *mainWindow = [UIApplication sharedApplication].windows[0];
窗口从后往前排列,因此主窗口应始终位于索引 0 处。
【讨论】:
如果没有窗口,您应该调用[[[UIApplication sharedApplication] windows] firstObject]
以避免出现越界异常(并非永远不会有任何窗口,但避免这些是一个好习惯【参考方案3】:
Swift 3.0 版本的rmaddy's answer:
let window = UIApplication.shared.windows.first
我还应该补充一点,由于 ios 8.0 UIAlertController
已取代 UIAlertView
并且作为视图控制器,您可能不再面临创建新窗口的问题。
【讨论】:
【参考方案4】:UIApplication *application = [UIApplication sharedInstance];
NSarray *appWindows = [NSArray arrayWithArray:application.windows];
UIWindow *mainWindow = [appWindows objectAtIndex:0];
我不确定,但这可能会有所帮助。
【讨论】:
【参考方案5】:在斯威夫特中:
UIApplication.sharedApplication().delegate?.window
【讨论】:
【参考方案6】:对我来说,我展示的是popViewController
self.presentViewController(popViewController, animated: true, completion: nil)
然后在这个 popViewController 的viewDidLoad()
中我正在添加一个子视图,这会导致控制台中的错误和显示错误。所以我必须找到另一种解决方案来让它发挥作用。希望这会有所帮助。
【讨论】:
【参考方案7】:斯威夫特 3
if let window = NSApplication.shared().windows.first
// you can now modify window attributes
【讨论】:
他说的是UIApplication
而不是NSApplication
,它被标记为iOS
如果每次发生这种情况时我都有一美元(人们用 Cocoa Touch 回答 Cocoa 问题),我会成为一个有钱人。 :) 让泰德松懈一些。 :)【参考方案8】:
斯威夫特 3
class func sharedInstance() -> AppDelegate
return UIApplication.shared.delegate as! AppDelegate
【讨论】:
以上是关于获取应用程序的主窗口的主要内容,如果未能解决你的问题,请参考以下文章