Mit applicationwillenterforeground für eine passcode-Bildschirm
Vor iOS4, meine app ' s initial view controller würde prüfen, ob ein passcode on/off-Einstellungen variable in viewWillAppear und wenn Sie ein modales passcode-Bildschirm, der würde dort bleiben, bis der richtige passcode eingegeben wurde oder die Home-Taste gedrückt wurde.
Mit iOS4, wenn meine app in den hintergrund, ich möchte, dass der Benutzer sich wohl fühlen, dass die Daten in der app enthalten ist nicht leicht zugänglich, wenn Sie waren zu hand Ihr Telefon, um jemanden zu verwenden.
Da die app zurückgeben könnte, auf jedem Bildschirm (der Bildschirm, die app wurde letzten auf), ich dachte, ich würde verwenden Sie die UIApplicationWillEnterForegroundnotification alle über den Ort mit lokaler Selektoren (doppelte enterPasscode Methoden), die jeweils mit der korrekten view-controller zu schieben, basierend auf dem lokalen Bildschirm, aber es muss einen besseren Weg geben.
Kann ich habe eine leichte begriffliche Missverständnis hier. Kann jemand empfehlen, einen anderen Ansatz oder Stups mich an den nächsten Schritt. Kann ich dies als eine gemeinsame Methode aber noch wissen, die richtigen lokalen view-controller zu schieben?
Dank
EDIT/UPDATE:
Kurze version: Es funktioniert, aber vielleicht gibt es noch einen besseren Weg (jede Hilfe dankbar)...
Ich einen standard geschaffen, der singleton mit einem view-controller.
PasscodeView.h mit:
UIViewController *viewController;
@property (nonatomic, retain) UIViewController *viewController;
PasscodeView.m mit:
@synthesize viewController;
Ich habe dies im 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];
}
und die folgenden in all meinen viewDidLoad, die Aktualisierung der aktuellen Ansicht-controller, als ich ging in jedem Bildschirm (nur 2 Linien aber noch scheint, dass es eine bessere Möglichkeit gibt):
PasscodeView *passcodeView = [PasscodeView sharedSingleton];
passcodeView.viewController = [[self navigationController] visibleViewController];
Ich wünschte, es gäbe eine Möglichkeit zu haben, bekommen Sie die aktuelle view-controller aus applicationWillEnterForeground aber ich konnte ihn nicht finden - jede Hilfe hier noch geschätzt.
Konsistenz, änderte ich eine Zeile Hinzugefügt und eine Zeile erhalten Sie eine Navigationsleiste, um mit dem rest der app und einen Titel.
UINavigationController *passcodeNavigationController = [[UINavigationController alloc] initWithRootViewController:passcodeInput];
[currentController presentModalViewController: passcodeNavigationController animated:NO];
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie zentralisieren Sie dieses Verhalten in Ihrem app-Delegierten durch die Umsetzung
Könnten Sie implementieren eines singleton, die speichert den aktuell entsprechenden modal-view-controller, aktualisieren Sie es in viewWillAppear in jeder view-Controller.
Bearbeiten: ich war der Annahme, dass Sie bereits eine Reihe von view-Controllern, dass Sie zeigen wollte. Ich bezweifle, dass Sie es wirklich benötigen. Wenn Sie haben eine genannt, sagen PasscodeInputController, dann Ihre applicationWillEnterForeground würde folgendermaßen Aussehen:
Ich hoffe, dass die Adressen Ihrer Frage direkt.
Ihre Anwendung Verhalten beim Wiedereintritt in den Vordergrund sollten so ähnlich wie möglich, wenn es startet zum ersten mal. Mit diesem im Verstand, Sie könnte kombinieren Sie Ihre
applicationDidFinishLaunching:
mitapplicationWillEnterForeground:
aber wenn man bedenkt einige Ansichten kann bereits geladen werden. Der code ist so etwas wie dieses:Je nach app ' s detail könnte es zunächst erforderlich, eine Arbeit, aber es hat einige Vorteile: