0
votes

Fonction d'appel Une seule fois dans UIViewController, iOS SWIFT4.2, XCode10.1

J'ai un appel de fonction (vue pop) dans mon contrôleur de 1ère vue qui doit être appelé une seule fois dans l'application. Depuis lors, chaque fois que je retourne à la 1ère vue contrôleur, la fonction doit ne pas être appelée à nouveau.

 ///// Once Action in View Controller
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        if self.isBeingPresented || self.isMovingToParent {
         // Perform an action that will only be done once
             popView()
        }
    }


5 commentaires

Qu'est-ce que vous utilisez pour revenir au contrôleur de première vue ??


Enregistrer le drapeau dans UserDefaultS -> ISPOPOVACPPPPED -> TRUE / FAUX.Si It FAUX, puis POP IT et UPDATE ISPOPOVERVCPPPED comme vrai.


@ Jarvis The Avenger, j'utilise Let Let ViewController: UIVIEWCONTROLLER = UISTORYBOARD (Nom: "Main", Bundle: Nil) .IdidInteviewController (SwrevealViewController ") Comme UIViewController Self.Present (ViewController, Animated: Faux, Achèvement: Nil)


@Sakshi, pourriez-vous s'il vous plaît expliquer comme code ... j'ai essayé mais quelque chose manque


@Zeemriverswave J'ai publié un code, plz vérifier cela.let-moi savoir si des problèmes sont là.


6 Réponses :


2
votes

Vous devez appeler cela dans la méthode ViewDidLoad. Il s'appelle une fois par cycle de vie UIViewController. Documentation ici .

Tout comme ceci: p> XXX PRE>

Si votre chemin est une vue pop après avoir été une fois dans le contrôleur de la vue, vous pouvez faire comme suit: P>

    /// bool that help indicate your visit 
    var isViewControllerVisited = false 

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        if isViewControllerVisited {
         // Perform an action that will only be done once
             popView()
        }

        //change it here
        isViewControllerVisited = true 
    }


3 commentaires

J'ai essayé dans la viefDiDload sa toujours n'a pas d'effet ... n'a pas fonctionné


@Zeemriverswave êtes-vous sûr de votre code à l'intérieur de la déclaration?


@Zeemriverswave Si vous voulez PopView lorsque vous revenez simplement au contrôleur, je vous recommande d'utiliser une variable globale BOOL pour vous identifier dans ce contrôleur, puis l'appelez à l'intérieur de la viewDidAppear / Viewwillappear.



0
votes

Selon le cycle de vie du contrôleur d'affichage, la méthode ViewDidDload est appelée une seule fois. Donc, vous devez appeler votre méthode là-bas.

ou vous pouvez essayer le code suivant: xxx


0 commentaires

0
votes

ci-dessous du code, essayez-le ..

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    UserDefaults.standard.set(false, forKey: "isPopOverVCPopped")

    if UserDefaults.standard.bool(forKey: "isPopOverVCPopped") == false {
        UserDefaults.standard.set(true, forKey: "isPopOverVCPopped")

        popView()
    }
}


1 commentaires

Vous définissez le drapeau juste avant de rechercher sa valeur.



0
votes

Si vous souhaitez appeler cette fonction PopView une seule fois sur votre application, essayez ceci,

dans l'application déléguée, définissez la valeur BOOL P>

override func viewDidLoad() {
    super.viewDidLoad()
    hasLaunchPop()
}


1 commentaires

Var privé isshowpop = Bool.elf ?? Ce n'est même pas utilisé.



1
votes

Pour moi, je préfère utiliser le chargement paresseux. Cela permet de ne pas écrire de logique, il suffit de utiliser la déclaration Swift Lazy Var. Quelque chose comme ceci: xxx


0 commentaires

4
votes

Peut-être que cela fonctionne. Dans votre mode de vue, ajoutez une propriété statique: xxx

Bien sûr, en fonction de votre configuration, cela ne fonctionnera pas si vous avez plus d'une instance de cette visiteuse qui devrait conserver son propre état sur Si PopView devrait être appelé ou non.


1 commentaires

Il y a deux options pour cette solution static var et var en fonction de la logique commerciale.