/ / Come faccio a passare da UIWindows? - swift3, uiwindow

Come faccio a passare da UIWindows? - swift3, uiwindow

Scenario:

Ho creato una finestra overlay (con tag = 100) che alla fine voglio eliminare, ma il seguente codice non funziona:

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>>

Qualche idea per alternare o eliminare la finestra di sovrapposizione?

risposte:

0 per risposta № 1

Basta impostare la finestra "s isHidden proprietà su true:

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

Se si imposta qualsiasi riferimento a questa finestra su zero, la finestra verrà eliminata.

Si prega di notare che non si dovrebbe chiamare resignKey(). A partire dal la sua documentazione (sottolineatura mia):

Discussione
Non chiamare mai questo metodo direttamente. Il sistema lo chiama metodo e postUIWindowDidResignKey per consentire alla finestra di sapere quando non è più la chiave. L'implementazione predefinita di questo metodo lo fa nulla, ma le sottoclassi possono ignorarlo e utilizzarlo per eseguire attività relativo alla rinuncia allo stato della finestra chiave.

Lo stesso vale per becomeKey(), a proposito. Probabilmente vuoi usare makeKey () o makeKeyAndVisible ().


0 per risposta № 2

Questa è essenzialmente una domanda in due parti.

  1. Come posso visualizzare una UIWindow creata e
  2. Come posso respingerlo?

Ho imparato che devo mantenere un riferimento alla UIWindow appena creata piuttosto che semplicemente avere locale-scope riferimento. ... che è ovvio.

Una volta che ho un riferimento persistente alla UIWindow ancillary, posso semplicemente assegnargli zero per rimuoverlo:

var hamburgerWindow:UIWindow?

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