iphone - varios - ¿Cómo eliminar un UIWindow?
cómo eliminar varios contactos a la vez en iphone (5)
La forma correcta de ocultar una ventana es establecer la propiedad hidden
en SÍ. Para eliminarlo de la propiedad de windows
de UIApplication, simplemente libera la ventana (en ARC establece todas las referencias a nula).
Por supuesto, usted querría tener otra ventana en su lugar en este momento.
Pensé que era fácil como [myWindow resignKeyWindow]
y [self.window makeKeyAndVisible]
pero supongo que no ... ¿ [self.window makeKeyAndVisible]
qué hacer?
Gracias :)
No invoque -resignKeyWindow
directamente, estaba destinado a ser anulado para ejecutar algún código cuando se elimine su UIWindows. Para eliminar la ventana antigua, debe crear una nueva instancia de UIWindow y hacerla -makeKeyAndVisible
, la ventana antigua renunciará a su estado clave. En iOS 4 incluso recolectará su antigua ventana UI en la basura , siempre que no tenga ninguna referencia a ella. Hacer esto en iOS 3.x tendría efectos desastrosos. Advertido ya
No puede eliminar la ventana del delegado de la aplicación. Sin embargo, puede eliminar cualquier ventana personalizada creada.
Para quitar la ventana, primero debe proporcionar un reemplazo. Así obtenemos la ventana por defecto.
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
Ahora tenemos acceso a la ventana predeterminada a través de la propiedad de window
del delegado de la aplicación.
Ahora obtenga el controlador de navegación original o personalizado. rootViewController
auto a rootViewController
.
Llamar a makeKeyandVisible
elimina cualquier ventana y asigna la ventana del delegado de la aplicación como la ventana clave. ¡Configure rootViewController en el controlador de navegación que acaba de crear y está listo para comenzar!
DEMONavigationController *demoNav = [[DEMONavigationController alloc]initWithRootViewController:self];
[appDelegate.window makeKeyAndVisible];
appDelegate.window.rootViewController = demoNav;
Si tiene una ventana que no sea la ventana de la aplicación, úsela.
let mainWindow = UIApplication.shared.delegate?.window
mainWindow??.makeKeyAndVisible()
Tengo el mismo problema, puede que ayude.
Debe destruir todas las referencias fuertes antes de eliminar y desasignar una ventana, especialmente el controlador de control de raíz (rootWindowController). Creo que debajo del código es suficiente para borrar cualquier ventana:
[self.window.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
self.window.rootViewController = nil;
[self.window resignKeyWindow];
[self.window removeFromSuperview];