2011-11-22 5 views
82

Recentemente mi sono chiesto il fatto che un'app per iOS abbia solo uno UIWindow. Non sembra essere un problema creare un altro UIWindow e posizionarlo sullo schermo.Vantaggi, problemi, esempi di aggiunta di un altro UIWindow a un'app per iOS?

La mia domanda è un po 'vaga, ma io sono interessato a:

  • cosa potrei potenzialmente raggiungere con un secondo UIWindow che non può essere fatto in altri modi?
  • Cosa può andare storto quando si utilizzano più istanze UIWindow?
  • Ho visto che le persone usano un secondo UIWindow per visualizzare le visualizzazioni simili a quelle di un popover su iPhone. È un buon modo per farlo? Perché? Perchè no?
  • Esistono altri esempi in cui è perfettamente logico disporre di un altro UIWindow?

Non è che mi manchi qualcosa. Non ho mai sentito la necessità di creare un'altra istanza UIWindow ma forse permetterebbe di fare cose incredibili di cui non sono a conoscenza! :-)

Spero che possa aiutarmi a risolvere questo problema: Ho bisogno di aggiungere una "vista di copertina" su qualsiasi cosa attualmente visualizzata. Dovrebbe funzionare anche se sono già presenti uno o più controller modali presentati. Se aggiungo un UIView alla vista del controller di root, i controller modali sono posizionati in alto, così come i controller popover. Se presento la vista copertina modamente e c'è già un controller modale, è coperta solo una parte dello schermo.

+0

L'utilizzo di più UIWindows nelle applicazioni iOS http://shaune.com.au/using-multiple-uiwindows-in-ios-applications/ – onmyway133

risposta

19

A UIWindow può fluttuare sopra altri elementi dell'interfaccia utente come la tastiera di sistema.

Per indirizzare l'ultimo paragrafo: Creare un UIWindow con lo stesso frame della finestra principale. Impostare la proprietà windowLevel su UIWindowLevelStatusBar. Impostare la proprietà hidden su NO.

+0

Err, va bene. Grazie. Sapevo che. Puoi approfondire le mie domande? Sai come ottenere RID di UIWindow secondi che è stato aggiunto da makeKeyAndVisible? – Krumelur

+0

Imposta la proprietà nascosta del secondo UIWindow su SÌ. –

+0

Ho modificato la mia risposta. –

92

A partire dalla risposta di Rob Ho suonato in giro un po 'e vorrei scrivere alcune note per gli altri cercando di ottenere informazioni su questo argomento:

  • Non è affatto un problema per aggiungere un altro UIWindow. Basta crearne uno e makeKeyAndVisible. Fatto.
  • Rimuovilo rendendo visibile un'altra finestra, quindi rilascia quella che non ti serve più.
  • La finestra "chiave" riceve tutto l'input da tastiera.
  • UIWindow copre tutto, anche modali, popover, ecc. Fantastico!
  • UIWindow è sempre ritratto in modo implicito. Non ruota. Dovrai aggiungere un controller come controller di root della nuova finestra e lasciare che la rotazione della maniglia. (Proprio come la finestra principale)
  • Il livello della finestra determina quanto "alto" viene visualizzato. Impostalo su UIWindowLevelStatusBar per fare in modo che copra tutto. Impostare la proprietà hidden su NO.
  • Un secondo UIWindow può essere utilizzato per portare viste sullo schermo che galleggiano su tutto. Senza creare un controller fittizio solo per incorporarlo in un UIPopoverController.
  • Può essere particolarmente utile su iPhone dove non è presente il controller popover ma dove si potrebbe voler simulare qualcosa del genere.
  • E sì, ha risolto naturalmente il mio problema: se l'app si dimette dall'attivazione, aggiungi una finestra di copertura su ciò che è attualmente mostrato per impedire a iOS di prendere uno screenshot del contenuto corrente della tua app.
+0

Non avrei avuto il coraggio di usare un'altra UIWindow se non per la tua risposta. [Questo] (http://stackoverflow.com/a/6698102/458193) è stato anche estremamente utile perché la seconda UIWindow non eseguiva automaticamente l'autorotazione. –

+1

Post molto illuminante. Ma cosa succede se si abbandona questa finestra e si rendono visibili e visibili la finestra sottostante, mentre rootViewController della finestra sottostante ha un controller modale attualmente presentato? Presenterà il controller della vista modale? Quello che succede nella nostra applicazione è che rootViewController è presentato non quello modale ... –

+0

@Krumelur Questo va bene. Ho un dubbio. È, diciamo che la seconda UIWindow viene visualizzata sopra tutte le viste correnti. Quando l'utente fa clic su un pulsante nella vista che si trova nella prima UIWindow che presenta un altro viewcontroller. Questo secondo UIWindow si nasconderebbe. Come rendere questo UIWindow per essere visualizzato sempre in tutta l'intera app. –

Problemi correlati