0
votes

Comment garder les données THA enregistrées dans des champs de texte lorsque je suis revenu de la deuxième vue de la même vie?

Je travaille sur un formulaire d'inscription, je dois obtenir des données à partir d'un autre contrôleur d'affichage lorsque je revenir dans la première vue de la même visualisation, mes données stockées dans des champs de texte étaient vides. Je n'ai pas travaillé avec Sugues.J'ai mentionné une partie importante du code où une erreur peut être.

import UIKit
class EmergencyContactVC: UIViewController{
@IBAction func backTapped(_ sender: Any) {
    let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: "RegisterVC") as? RegisterVC
    vc?.phoneText = self.numberArray
    self.navigationController?.pushViewController(vc!, animated: true)
}


3 commentaires

Vous devez juste ajouter autoavigationController? .popviewController (animé: true). Vous ne faites pas que vous faites un contrôleur de poussée afin que chaque contrôleur de temps soit créé de nouveau.


Je dois ajouter autoavigationController? .popviewController (animé: true) Cette méthode dans le contrôleur de deuxième vue?


Oui, vous devez ajouter un contrôleur de deuxième vue.


3 Réponses :


2
votes

Lorsque vous instantiateviewController code> Il créera un nouvel objet pour registervc code>.

Avez-vous essayé ceci: p>

var retrievedString = defaults.objectForKey("yourKey") as? String


2 commentaires

Il y a plus de 10 champs de texte. L'utilisation de Nsuserdefaults ne serait pas complexe et difficile? ou là une autre solution?


Oui correct!! Essayez de ne pas utiliser de ne plus instancier ..



0
votes

La réponse de @harish pourrait être une bonne solution mais, à cause de UserDefaults stockera ces données pour toujours (même si vous fermerez l'application et l'ouvrira à nouveau), une autre bonne solution pourrait être une variable globale, donc ces données. serait stocké et utilisé même si vous modifiez la vue Contentreuse, puis revenez, mais ils ne seront pas stockés si vous fermerez l'application. Déclarez une variable en dehors de la portée (en dehors de la classe), comme suit: xxx

Il s'agit d'un exemple, vous pouvez donc l'utiliser dans une autre vue de vue, puis l'utiliser à nouveau lorsque vous revenez.


0 commentaires

0
votes

Tout d'abord, dans votre exemple, vous avez registervc code> appuyant d'urgenceContactvc code> et d'urgenceContactvc code> appuyant registervc code>. Vous vous référez également à ContactScontroller Code>, mais il n'est pas clair comment ces trois sont censés interagir / écoulement. Il semble que blacktheappe code> devrait PopViewController code>, pas instancier à nouveau.

Peu importe, il existe deux modèles appropriés pour réussir les données de VC2 à VC1 lorsque VC1 pousse VC2: délégué et segues . P>

  1. Délégué: Ceci définit un chemin de communication entre VC1 et VC2, permettant à VC2 d'appeler des méthodes de VC1 avant de disparaître. L'avantage des protocoles sur les segues est qu'ils peuvent être utilisés à tout moment pendant le cycle de vie du contrôleur d'affichage, entre les cellules et les vues de table, etc. Les délégués peuvent être utilisés lors de la transmission de données parmi plusieurs contrôleurs d'affichage connexes. LI> ol>

    en VC2, ajoutez le protocole et les propriétés: p> xxx pré>

    en VC1, déclarez la propriété que vous souhaitez recevoir et, où vous souhaitez appuyer sur VC2. , Attribuez VC1 comme délégué: p>

    func unwindToVC1( _ segue: UIStoryboardSegue ) {
        if let vc2 = segue.source as? VC2 {
            self.name = vc2.nameEnteredByUserInVC2
        }
    }
    


0 commentaires