J'ai 5 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. P> p> uiviewcontroller code> S que je veux transmettre des données d'un uiviewcontroller code> à un autre. Donc, fondamentalement, le 3ème - 5e uiviewcontroller code> 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 code> mais malheureusement, il n'a pas fonctionné car mon uiImageView code> dans le 2e uiviewcontroller code> une image vide.
Voici mon code pour réussir l'image à la 2e uiviewcontroller code>:
3 Réponses :
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é P>
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 code> sets b.delege = auto code>; B code> définit c.delgate = self.délégate code>; c code> définit d.delegate = auto.delgate code>; d code> définit e.delegate = self.delgate code> ... maintenant E code> 's self.délégate code> points sur < Code> A code> - 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 i> mauvais design.
Ouais tu as raison ... et qu'en est-il des coordinateurs?
Après des commentaires, il apparaît que le problème était lié au code ne définissant jamais la propriété 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 si Vous modifiez votre code comme suit: p> SO ... P> iMage code> de la vue Image dans le contrôleur "Destination" . P>
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>
destinatairevc code> deux fois, j'ai donc changé le premier à popupvc code> li>
Guard Let CODE> pour vous assurer d'obtenir la bonne "destination" Voir le contrôleur Li>
[1] code> (pas 3) li>
ul> 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)
}
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 ..." I> 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 code> ... Qu'est-ce que Datapass code>?
Je n'ai aucune erreur mais mon uiImageView code> sur mon 2e contrôleur est toujours vide où il aurait dû être une image transmise dessus. La classe code> datapass code> est une classe modèle où je passe des données et l'une d'elles est un uiimage code>. Dans ma compréhension, définissez l'image sur la classe code> de la classe code> et le transmettre à mon contrôleur 2ND fournira le uiimageview code> avec un uiimage code> sur ma 2e vue manette. Mais on dirait que cela ne fonctionne pas parce que lorsque je passe la classe datapass code> la classe uiImageView code> n'a toujours aucune image
Vous passez donc un objet datapass code> avec une propriété code> image code> sur votre contrôleur 2ND View. Où et quand définissez-vous cette image sur le uiimageView code> 'S .Image code> 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.
Pour une raison quelconque, le alors voici ce que j'ai fait était que je viens de définir le et cela fonctionne comme je m'attendais. p> p> uiImageView code> sur mon 2e uiviewcontroller code> ne met pas à jour l'image parce que j'ai passé le uiimage code> dans la Datapass < / Code> Classe de modèle. J'ai changé le code comme celui-ci: uiimage code> directement sur la variable code> ASSETPHOTO code> dans mon 2ème contrôleur. Et pour mettre à jour le uiimageview code> i Création d'une fonction de mon 2e contrôleur pour vérifier si la variable AssetPhoto code> est nul ou non et l'appelez dans ViewWillappear code> Comme Ceci: p>
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.