如何在Swift中将视图添加到视图层次结构的顶部?

6

我一直在使用这个:

UIApplication.sharedApplication().keyWindow?.rootViewController!.view.addSubview(self.customView)

在应用程序中,要在视图层次结构中添加一个模态视图。

但是这个操作有时候会出现问题。它有时可以正常添加子视图,但有时却无法工作。 在什么情况下这种方法不起作用,如何最好地在视图层次结构中添加模态视图,就像UIAlertView一样。


这些情况是什么时候它不起作用?你检查了视图层次结构吗?你为添加的自定义视图设置了适当的“frame”吗? - Lars Blumberg
实际上这只是偶尔发生。我无法在模拟器中重现此问题。但是当我为手机创建构建时,该问题会随机出现而不是在调试时。因此,我无法检查视图层次结构。 - Prajeet Shrestha
理论上来说,当我们将视图添加到Keywindow中的rootViewController的视图中时,它应该在层次结构的顶部,不是吗? - Prajeet Shrestha
理论上它应该那样工作。但是当 UIAlert 或 UIActionSheet 被呈现时,关键窗口可能会发生变化。但这似乎不是你的情况。 - Lars Blumberg
1
在添加了该视图之后,还需要执行 view.bringSubviewToFront(theSubview) - Daniel Krom
1个回答

7
根据情况,可能会有多个UIWindow同时存在 - 例如,如果系统警告出现,您将拥有两个独立的窗口(一个为您的视图控制器,一个为警告本身) 。
类似的例子可以用于系统键盘。 如果键盘具有焦点,则它将成为您的keyWindow。
确保将子视图添加到所有窗口的顶部的一种方法可能是:UIApplication.sharedApplication().windows.last?.addSubview(yourSubView)
我还看到过人们使用应用程序委托,并使用:UIApplication.sharedApplication().delegate?.window

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接