Ich habe einen View Controller, in dem mein Wert 0 (Beschriftung) ist, und wenn ich diesen View Controller von einem anderen aus öffne, habe ViewController
ich viewDidAppear
den Wert 20 auf dem Etikett festgelegt. Es funktioniert gut , aber wenn ich meine App zu schließen und als ich wieder meine app öffnen , aber der Wert ändert sich nicht , weil viewDidLoad
, viewDidAppear
und viewWillAppear
nichts aufgerufen. Wie kann ich anrufen, wenn ich meine App öffne? Muss ich etwas tun applicationDidBecomeActive
?
175
Antworten:
Ich war neugierig auf die genaue Abfolge der Ereignisse und habe eine App wie folgt instrumentiert: (@Zohaib, Sie können den folgenden NSNotificationCenter-Code verwenden, um Ihre Frage zu beantworten.)
Beim Start sieht die Ausgabe folgendermaßen aus:
Geben Sie den Hintergrund ein und geben Sie den Vordergrund erneut ein:
quelle
Verwenden von Objective-C
Sie sollen ein Register
UIApplicationWillEnterForegroundNotification
in IhrerViewController
‚sviewDidLoad
Methode und wann immer app zurück von Hintergrund kommt können Sie tun , was Sie in der Methode für die Benachrichtigung registriert tun wollen.ViewController
‚s viewWillAppear oder viewDidAppear wird nicht aufgerufen werden , wenn app zurück von Hintergrund in den Vordergrund kommt.Vergessen Sie nicht, die Registrierung der Registrierung aufzuheben, für die Sie registriert sind.
Hinweis: Wenn Sie sich
viewController
für registrieren, wird IhreUIApplicationDidBecomeActiveNotification
Methode jedes Mal aufgerufen, wenn Ihre App aktiv wird. Es wird nicht empfohlen, sichviewController
für diese Benachrichtigung zu registrieren .Swift verwenden
Zum Hinzufügen eines Beobachters können Sie den folgenden Code verwenden
Um den Beobachter zu entfernen, können Sie die Deinit-Funktion von Swift verwenden.
quelle
Swift 3.0 ++ Version
viewDidLoad
Registrieren Sie sich in Ihrem Benachrichtigungscenter, um diese im Hintergrund geöffnete Aktion anzuhörenFügen Sie dann diese Funktion hinzu und führen Sie die erforderliche Aktion aus
Fügen Sie schließlich diese Funktion hinzu, um den Benachrichtigungsbeobachter zu bereinigen, wenn Ihr View Controller zerstört wird.
quelle
Swift 4.2. Ausführung
Registrieren Sie sich beim NotificationCenter
viewDidLoad
, um benachrichtigt zu werden, wenn die App aus dem Hintergrund zurückkehrtImplementieren Sie die Methode, die aufgerufen werden soll.
Sie können den Beobachter entfernen, sobald der
ViewController
zerstört ist. Dies ist nur unter iOS9 und macOS 10.11 erforderlichquelle
Lassen Sie einfach Ihren View Controller für die
UIApplicationWillEnterForegroundNotification
Benachrichtigung registrieren und reagieren Sie entsprechend.quelle
viewDidLoad
vorgeschlagenen @nsgulliver. SieviewDidAppear
werden auch anrufendoYourStuff
, um Ihr Etikett auf den gewünschten Wert einzustellen.Ich denke, die Registrierung für die UIApplicationWillEnterForegroundNotification ist riskant, da möglicherweise mehr als ein Controller auf diese Benachrichtigung reagiert. Nichts garantiert, dass diese Controller beim Empfang der Benachrichtigung noch sichtbar sind.
Folgendes mache ich: Ich erzwinge den Aufruf von viewDidAppear auf dem aktiven Controller direkt von der didBecomeActive-Methode des App-Delegaten:
Fügen Sie den folgenden Code hinzu
- (void)applicationDidBecomeActive:(UIApplication *)application
quelle
Versuchen Sie, dies in AppDelegate applicationWillEnterForeground hinzuzufügen.
quelle
Gemäß Apples Dokumentation:
Beschreibung:
Sagt einem untergeordneten Controller, dass sich sein Erscheinungsbild ändern wird. Wenn Sie einen benutzerdefinierten Container-Controller implementieren, teilen Sie dem Kind mit dieser Methode mit, dass seine Ansichten angezeigt oder ausgeblendet werden . Sie nicht aufrufen
viewWillAppear:
,viewWillDisappear:
,viewDidAppear:
, oderviewDidDisappear:
direkt .Beschreibung:
Teilt einem untergeordneten Controller mit, dass sich sein Erscheinungsbild geändert hat. Wenn Sie einen benutzerdefinierten Container-Controller implementieren, teilen Sie dem Kind mit dieser Methode mit, dass der Ansichtsübergang abgeschlossen ist.
Beispielcode:
Frage: Wie habe ich behoben?
Antwort : Ich habe diese Zeilen in der Anwendung gefunden. Diese Zeilen haben dazu geführt, dass meine App keine ViewWillAppear-Benachrichtigungen erhalten hat. Als ich diese Zeilen kommentierte, funktionierte es gut .
quelle