2010-12-28 12 views
27

Ho pensato che fosse facile come [myWindow resignKeyWindow] e [self.window makeKeyAndVisible] ma suppongo di no ... Ragazzi sapreste cosa fare?Come rimuovere una UIWindow?

Grazie :)

+0

Puoi spiegare/elaborare un po 'di più quello che sei fino a? Poiché la domanda non è troppo chiara. Potrebbe essere che ho torto. –

risposta

13

Non invocare -resignKeyWindow direttamente, è stato concepito per essere sovrascritto per eseguire del codice quando i UIWindows viene rimosso. Per rimuovere la vecchia finestra è necessario creare una nuova istanza di UIWindow e renderla -makeKeyAndVisible, la vecchia finestra rinuncerà allo stato della chiave. In iOS 4 raccoglierà anche il tuo vecchio UIWindow, a condizione che tu non abbia alcun riferimento ad esso. Fare questo in iOS 3.x avrebbe effetti disastrosi. Avvisato

+5

Questo effettivamente cambia quale finestra è la chiave Window, ma non sembra rimuoverla da application.windows .... – samvermette

+0

La superview della finestra personalizzata è nulla. Basta impostare è nascosto a NO – tristan

+0

questa risposta sotto (da Nikolai Ruhe) ti dice come effettivamente rimuovere una finestra –

-8

Ho lo stesso problema, potrebbe aiuta.

È necessario distruggere tutti i rif. Forti prima di rimuovere e dealloc di una finestra, in particolare il rootWindowController. Credo che qui di seguito il codice è sufficiente per eliminare qualsiasi finestra:

[self.window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
    self.window.rootViewController = nil; 
    [self.window resignKeyWindow]; 
    [self.window removeFromSuperview]; 
+4

Come menzionato in alcuni degli altri post, non dovresti chiamare direttamente "resignKeyWindow'. – ThomasW

64

Il modo corretto per nascondere una finestra è quella di impostare la proprietà hidden su YES. Per rimuoverlo dalla proprietà windows di UIApplication, basta rilasciare la finestra (in ARC si impostano tutti i riferimenti su zero).

Ovviamente vorrai avere un'altra finestra in questo momento.

+3

Fare nil ha funzionato per me in ARC. – NightFury

+0

Questo è il vero modo corretto. – Leo

0

Non è possibile rimuovere la finestra dal Delegato app. Tuttavia è possibile rimuovere qualsiasi finestra personalizzata creata.

Per rimuovere la finestra è necessario innanzitutto fornire una sostituzione. Quindi otteniamo la finestra di default.

Ora abbiamo accesso alla finestra predefinita dalla proprietà appdelegate.window.

Ora ottieni il controller di navigazione originale o personalizzato. Assegna auto come rootviewcontroller.

Calling makekeyandvisible rimuove tutte le finestre e assegna appdelegates finestra come finestra chiave. Imposta rootViewController come NavigationController che hai appena creato e sei a posto!

DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self]; 
[appDelegate.window makeKeyAndVisible]; 
appDelegate.window.rootViewController = demoNav; 

Grazie!

0

Se avete qualsiasi finestra diversa finestra app, usarlo ..

let mainWindow = UIApplication.shared.delegate?.window 
mainWindow??.makeKeyAndVisible() 
Problemi correlati