Antes de iOS4, el controlador de vista inicial de mi aplicación verificaba una variable de configuración de contraseña activada/desactivada en viewWillAppear y, si estaba activada, presentaba una contraseña modal que permanecería allí hasta que se ingresara la contraseña correcta o Botón de inicio fue presionado.Usando applicationwillenterforeground para una pantalla de código
Con iOS4, si mi aplicación ha estado en segundo plano, me gustaría que el usuario se sienta cómodo de que los datos contenidos en la aplicación no sean de fácil acceso si tuvieran que entregar su teléfono a alguien para usar.
Dado que la aplicación podría volver a cualquier pantalla (la última pantalla en la que estaba la aplicación), pensé que usaría la UIApplicationWillEnterForegroundNotification por todos lados con selectores locales (métodos enterPasscode duplicados), cada uno con el controlador de vista correcto para empuje basado en la pantalla local, pero tiene que haber una mejor manera.
Puedo estar teniendo un ligero malentendido conceptual aquí. ¿Puede alguien sugerir otro enfoque o empujarme hacia el próximo paso? ¿Puedo tener esto como un método compartido pero aún así conocer el controlador de vista local correcto para enviar?
Gracias
EDIT/UPDATE:
versión corta: Funciona, pero puede que todavía puede haber una mejor manera (cualquier ayuda apreciada) ...
he creado un producto único estándar con un controlador de vista.
PasscodeView.h que contienen:
UIViewController *viewController;
@property (nonatomic, retain) UIViewController *viewController;
PasscodeView.m que contienen:
@synthesize viewController;
que poner esto en el AppDelegate:
-(void)applicationWillEnterForeground:(UIApplication*)application {
PasscodeView *passcodeView = [PasscodeView sharedDataManager];
UIViewController *currentController = [passcodeView viewController];
NSLog(@"%@", currentController); //testing
EnterPasscode *passcodeInput = [[EnterPasscode alloc] initWithNibName:@"Passcode" bundle:nil];
[currentController presentModalViewController:passcodeInput animated:NO];
[passcodeInput release];
}
y la siguiente en toda mi viewDidLoad, actualizando el controlador de vista actual cuando entré en cada pantalla (solo 2 líneas pero aún parece que hay ' Es una manera mejor):
PasscodeView *passcodeView = [PasscodeView sharedSingleton];
passcodeView.viewController = [[self navigationController] visibleViewController];
Me gustaría que hubiera una manera de haber conseguido el controlador de vista actual de applicationWillEnterForeground pero no pude encontrarlo - cualquier ayuda aquí todavía apreciado.
Para mayor coherencia, cambié una línea y agregué una línea para obtener una barra de navegación que coincidiera con el resto de la aplicación e incluyera un título.
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeInput];
[currentController presentModalViewController: passcodeNavigationController animated:NO];
Aquí es donde comencé, pero no sabía qué poner para un controlador de vista. Lo pensaré un poco y lo intentaré. –
ver las ediciones anteriores. –
Entiendo conceptualmente lo que está intentando hacer: presentar aquí una pantalla de código de acceso en lugar de cada controlador de vista: parece que debería funcionar, pero no es así. Copió el código exactamente como está (cambió PasscodeInputController a EnterPasscode), crea bien, sin errores, sin advertencia, pero no aparece nada. Al principio no estaba familiarizado con la propiedad rootViewController de UIWindow, pero después de leer qué es, parece que debería funcionar, aunque no pude encontrar ningún otro ejemplo. Intenté un par de cosas más: intenté usar un controlador de navegación, intenté una subvista, makeKeyAndVisible pero nada. –