0
votes

Comment transmettre des données lorsque vous appelez POPTOVIEWCONTROLLER?

J'ai 5 uiviewcontroller S que je veux transmettre des données d'un uiviewcontroller à un autre. Donc, fondamentalement, le 3ème - 5e uiviewcontroller est de capturer une image et d'envoyer-le sur le serveur. Après cela, je souhaite envoyer l'aperçu de l'aperçu au 2e uiviewcontroller mais malheureusement, il n'a pas fonctionné car mon uiImageView dans le 2e uiviewcontroller une image vide. Voici mon code pour réussir l'image à la 2e uiviewcontroller : xxx

Je ne suis pas sûr où est-ce que j'ai mal fait parce que je suis toujours neuf dans le développement IOS . Si vous avez besoin de plus de code, n'hésitez pas à demander et je vous le fournirai. Toute aide serait appréciée. Merci.


2 commentaires

Est-ce que cela répond à votre question? Passage entre les contrôleurs de vue


Regardez à l'aide de la méthode de déléguée pour réussir les données, ou le centre de notification.


3 Réponses :


0
votes

Vous devez créer un délégué que vous appelez avant appelez POPTOVIEWCONTROLLER () La 3ème VC met en œuvre le délégué et lorsque vous montrez les 4ème et 5e VC, vous passez la 3ème VC en tant que délégué


5 commentaires

Comment transmettre ce délégué? de la classe A à la classe E? ma pile est un b c d e


@jawadali - plusieurs façons de "réussir ce délégué" ... Ajouter une propriété de déléguée à chaque ... A sets b.delege = auto ; B définit c.delgate = self.délégate ; c définit d.delegate = auto.delgate ; d définit e.delegate = self.delgate ... maintenant E 's self.délégate points sur < Code> A - est juste une méthode.


Passage des délégués, n'est-ce pas une mauvaise stratégie de conception?


@jawadali - Il existe différentes façons d'aborder la tâche de l'OP ... Passez le délégué, «Marchez la pile de navigation de navigation», utilisez une classe Data-Manager, etc. Tous ont des avantages et des inconvénients. "Passer le délégué" par les classes intermédiaires peut ne pas être la meilleure approche, mais je ne dirais pas que c'est nécessairement mauvais design.


Ouais tu as raison ... et qu'en est-il des coordinateurs?



1
votes

Modifier strud>

Après des commentaires, il apparaît que le problème était lié au code ne définissant jamais la propriété iMage code> de la vue Image dans le contrôleur "Destination" . P>


Il existe différentes façons de faire cela ... p>

Votre approche devrait em> travailler, mais je pense que vous avez juste le mal d'indexation. P>

A UINAVIGATIONController CODE> contient une pile de contrôleurs de visualisation, en commençant par le contrôleur "racine". Celles-ci sont dans un tableau em> EM> STR> P>

 Entrez la description de l'image ici P>

si Vous modifiez votre code comme suit: p>

  • peut être déroutant d'utiliser destinatairevc code> deux fois, j'ai donc changé le premier à popupvc code> li>
  • Utilisez Guard Let CODE> pour vous assurer d'obtenir la bonne "destination" Voir le contrôleur Li>
  • Obtenez la VC à l'index [1] code> (pas 3) li> ul>

    SO ... P>

    func showSuccessPopUp() {
        let popupVC = VehiclePhotoSuccessPopUpVC(nibName: "VehiclePhotoSuccessPopUpVC", bundle: nil)
        popupVC.modalPresentationStyle = .overCurrentContext
        popupVC.okTapped = { //(sender) in
            self.dataPass.image = self.photoImage // Passing the image to the model
    
            //let destinationVC = self.navigationController?.viewControllers[3] as! RestructureFormVC
            // we want to find the Second VC in the stack, which will be [1]
            guard let destinationVC = self.navigationController?.viewControllers[1] as? RestructureFormVC else {
                fatalError("Second VC in navigation stack is NOT a RestructureFormVC")
            }
    
            destinationVC.source = "previewPhoto" // A string for knowing where the source is in the 2nd UIViewController
            destinationVC.dataPass = self.dataPass // Passing the model to the 2nd UIViewController
            self.navigationController?.popToViewController(destinationVC, animated: true)
        }
    
        self.present(popupVC, animated: false, completion: nil)
    }
    


6 commentaires

Merci pour votre réponse, j'ai essayé de mettre en œuvre votre réponse à mon code, mais semble que cela ne fonctionne toujours pas. J'ai essayé d'utiliser un délégué mais cela me confondre toujours pour moi. Pourriez-vous me fournir un exemple d'utilisation d'un délégué de ce problème? Merci!


Vous devrez fournir des détails supplémentaires. "... ça ne marche toujours pas ..." Qu'est-ce que cela signifie? Vous obtenez une erreur? Pas d'erreur mais aucun résultat? Vous avez aussi la ligne self.datapass.image = self.photoiimage // passant l'image au modèle ... Qu'est-ce que Datapass ?


Je n'ai aucune erreur mais mon uiImageView sur mon 2e contrôleur est toujours vide où il aurait dû être une image transmise dessus. La classe datapass est une classe modèle où je passe des données et l'une d'elles est un uiimage . Dans ma compréhension, définissez l'image sur la classe de la classe et le transmettre à mon contrôleur 2ND fournira le uiimageview avec un uiimage sur ma 2e vue manette. Mais on dirait que cela ne fonctionne pas parce que lorsque je passe la classe datapass la classe uiImageView n'a toujours aucune image


Vous passez donc un objet datapass avec une propriété image sur votre contrôleur 2ND View. Où et quand définissez-vous cette image sur le uiimageView 'S .Image propriété?


C'est correct, mais heureusement, cela fonctionne maintenant. Je vais répondre à ma propre question si vous voulez savoir ce que j'ai fait. Si vous pouvez corriger ma réponse s'il vous plaît si vous avez envie qu'il y ait quelque chose qui ne va pas avec ça. Je vous remercie beaucoup pour votre aide!


@LLEHCRAM - Je mets une édition en haut de ma réponse expliquant quel était le problème / la solution réelle.



0
votes

Pour une raison quelconque, le uiImageView sur mon 2e uiviewcontroller ne met pas à jour l'image parce que j'ai passé le uiimage dans la Datapass < / Code> Classe de modèle. J'ai changé le code comme celui-ci: xxx

alors voici ce que j'ai fait était que je viens de définir le uiimage directement sur la variable ASSETPHOTO dans mon 2ème contrôleur. Et pour mettre à jour le uiimageview i Création d'une fonction de mon 2e contrôleur pour vérifier si la variable AssetPhoto est nul ou non et l'appelez dans ViewWillappear Comme Ceci: xxx

et cela fonctionne comme je m'attendais.


0 commentaires