Xcode: Anzeige der Login-Ansicht in applicationDidBecomeActive
In meiner app möchte ich Ihnen zeigen, einen login-Bildschirm, die angezeigt wird, wenn die app startet, und wenn die app aktiv wird. Als Referenz, ich bin mit storyboards, ARC und es ist ein tabbed-bar-Anwendung.
Deshalb brauche ich zu tun, den Prozess in der applicationDidBecomeActive
Methode:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
if ( ... ) { //if the user needs to login
PasswordViewController *passwordView = [[PasswordViewController alloc] init];
UIViewController *myView = self.window.rootViewController;
[myView presentModalViewController:passwordView animated:NO];
}
}
In einem Maße, das funktioniert - kann ich eine Methode aufrufen in viewDidAppear
was zeigt eine Warnung anzeigen, um dem Benutzer zu erlauben, um sich anzumelden. Dies ist jedoch unerwünscht und ich würde gerne ein login-text-box und andere Elemente der Benutzeroberfläche. Wenn ich nicht nennen, meine login-Methode, passiert nichts und der Bildschirm bleibt schwarz, obwohl ich habe ein label und andere Elemente auf den anzeigen.
Kennt jemand eine Möglichkeit diese zu lösen? Mein passcode Ansicht ist eingebettet in einen Navigation-Controller, sondern ist losgelöst von der Haupt-storyboard.
- tun Sie haben die Lösung??
- Finden Sie aktualisierte Antwort unten. Ich bin der Durchführung der letzten Tests jetzt, aber es scheint zu funktionieren groß!
- Hat diese noch funktionieren? Welche Methode benutzt du jetzt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einer Vielzahl von Antworten führte mich schließlich zu einer Antwort, die scheint nicht zu kompliziert, also werde ich es hier posten - und es sieht eigentlich wirklich gut, wenn ich ehrlich bin.
Erstens, mein Passwort anzeigen eingebettet ist in eine Navigation-Controller (Editor -> Einbetten In) und dies ist verbunden mit der tab bar controller mit einem modal-segue mit einer id, in meinem Fall 'loginModal'.
In der
applicationDidBecomeActive
Methode, die etwas wie dieses:Und setzen Sie dann diese Funktion irgendwo in der App Delegate
Dadurch werden Ihre login-Sicht, wenn Sie die app beginnt, oder tritt in den Vordergrund (zum Beispiel beim wechseln zwischen apps).
HINWEIS: Die Zeile oben nicht funktioniert, wenn die Wurzel Ihrer app ist eingebettet in eine Navigations-controller.
Gibt es aber zwei bugs;
Diese beiden dazu, dass die app zum Absturz, so dass die folgende Zeile geht in der
applicationWillResignActive
Methode.Es im Grunde entlässt alle modalen Ansichten präsentiert werden. Dies ist vielleicht nicht ideal, aber modalen Ansichten sind mehr oft dann nicht, verwendet für die Eingabe von Daten und damit in vielen Fällen ist dies ein erwünschter Effekt.
Sollten Sie init
PasswordViewController
viewcontroller aus dem xib oder wenn Sie die store-Benutzeroberfläche im Storyboard, die Sie verwenden sollten Segue für die Präsentation dieser controller.Kann ich nicht sagen, über die anderen Teile, aber das Teil scheint mir sehr seltsam.
in storyboards können Sie die store-view-Controller-und view-innen-Ansicht-Controller, so dass es nicht gut ist, zu speichern, anzeigen außerhalb der viewcontroller, weil Sie nicht in der Lage, laden Sie diese Ansicht von storyboard nach Erhalt der Speicher-Warnung. Bitte korrigieren Sie mich, wenn ich nicht bekomme, was du meinst.
Ist, wenn wir Sie von Ihrem Weg gibt es keinen Unterschied Last
PasswordViewController
beiapplicationDidBecomeActive
oder bei Ihrem ersten view-controller auf Storyboards, weil Sie den Aufruf vorhanden view-controller zuerst geladen view-controller. So können Sie es in Ihrem ersten view-controller. Auch Sie können speichern einige versteckte Einblick in Ihre ersten viewcontroller und zeigen Sie diese Ansicht, wenn der Benutzer anmelden muss.Ich es getestet. Also zunächst Ihren controller werden geladen und dann bekamen Sie zu Methode
applicationDidBecomeActive
. So ist es besser, den code innerhalb-(void)viewDidAppear:animated
Methode von Ihren ersten viewcontroller.Beste Grüße,
Danil
[myView performSegueWithIdentifier:@"loginModal" sender:self];