如何在UIWindows之间切换?

时间:2017-05-26 20:27:39

标签: swift3 uiwindow

方案:    

我创建了一个覆盖窗口(标签= 100),我最终想要解雇。但是下面的代码不起作用:

UIApplication.shared.windows.first?.becomeKey()
UIApplication.shared.windows.last?.resignKey()


(lldb) po UIApplication.shared.windows
▿ 2 elements
  - 0 : <UIWindow: 0x7fa698d0ad00; frame = (0 0; 768 1024); gestureRecognizers = <NSArray: 0x600000048550>; layer = <UIWindowLayer: 0x6000000278a0>>
  - 1 : <UIWindow: 0x7fa698d14bb0; frame = (0 0; 768 1024); autoresize = W+H; tag = 100; gestureRecognizers = <NSArray: 0x600000252a50>; layer = <UIWindowLayer: 0x600000229660>>

要么切换或删除叠加窗口的任何想法?

2 个答案:

答案 0 :(得分:0)

只需将窗口的isHidden属性设置为true:

var overlayWindow: UIWindow?
...
overlayWindow?.isHidden = true
overlayWindow = nil  // optional

如果您将此窗口的任何引用设置为nil,则窗口将被丢弃。

请注意,您不应该致电resignKey()。来自its documentation(强调我的):

  

<强>讨论
  永远不要直接调用此方法。系统调用此方法   方法和帖子UIWindowDidResignKey让窗口知道它何时   不再是关键。这个方法的默认实现   什么都没有,但是子类可以覆盖它并使用它来执行任务   与重新关键窗口状态有关。

顺便说一下,becomeKey()也是如此。您可能希望使用makeKey()makeKeyAndVisible()

答案 1 :(得分:0)

这基本上是一个由两部分组成的问题。

  1. 如何显示创建的UIWindow和
  2. 如何解雇?
  3. 我了解到我必须keep a reference to the newly-created UIWindow,而不仅仅是本地范围引用。 ......很明显。

    一旦我对辅助UIWindow有一个持久的引用,我只能指定它来删除它:

    var hamburgerWindow:UIWindow?
    
     @IBAction func displayOverlayWindowAction() {
         guard hamburgerWindow != nil else {
             displayOverLay()
             return
         }
         hamburgerWindow = nil
     }