[Débutant] Passer une valeur d'un controller vers vers un autre ?
Bonjour,
Je suis toujours dans mon processus de découverte du SDK iPhone (et d'ObjC). Je suis bloqué sur un truc tout con sûrement à cause de ma difficulté à apprehender comment l'API fonctionne :
J'ai une RootView qui propose une UITableView qui contient 3 rows. Lors que je choisis un row, ça charge une UIViewController (via "pushViewController") qui elle affiche une image en provenance d'Internet. ça fonctionne super bien.
Je voulais augmenter la difficulté en affichant une image différente (donc en appelant une URL différente) en fonction de la row sélectionnée. Mais je ne trouve pas le moyen de "passer" à la UIViewController qui va se charger, un "tag" lui permettant de faire un switch case et donc de pouvoir savoir quelle URL utiliser pour charger mon image.
Plus généralement donc: comment passer un paramètre à la UIViewController qui va se charger ?
En me relisant, je me rends compte que je ne suis pas très clair. M'enfin...
D'avance merci.
Pinus Biloute.
Je suis toujours dans mon processus de découverte du SDK iPhone (et d'ObjC). Je suis bloqué sur un truc tout con sûrement à cause de ma difficulté à apprehender comment l'API fonctionne :
J'ai une RootView qui propose une UITableView qui contient 3 rows. Lors que je choisis un row, ça charge une UIViewController (via "pushViewController") qui elle affiche une image en provenance d'Internet. ça fonctionne super bien.
Je voulais augmenter la difficulté en affichant une image différente (donc en appelant une URL différente) en fonction de la row sélectionnée. Mais je ne trouve pas le moyen de "passer" à la UIViewController qui va se charger, un "tag" lui permettant de faire un switch case et donc de pouvoir savoir quelle URL utiliser pour charger mon image.
Plus généralement donc: comment passer un paramètre à la UIViewController qui va se charger ?
En me relisant, je me rends compte que je ne suis pas très clair. M'enfin...
D'avance merci.
Pinus Biloute.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le plus simple et le plus adéquat est de créer une sous-classe de ta UIViewController qui te sert à afficher l'image.
Disons MyViewController, qui dérive donc de UIViewController...
- Ensuite je ne sais pas comment tu créais ta UIViewController que tu "push-ait" ([tt]pushViewController:animated:[/tt]), je veux dire si elle était associé à un fichier XIB pour définir son contenu ou si tu faisait tout par code... si tu as un XIB associé, il faut penser à indiquer que le "File's Owner", qui était typiquement dans ce cas un UIViewController, sera en fait plus précisément un "MyViewController".
- Et au moment de créer ton ViewController pour le pusher, tu crées un MyViewController au lieu d'un UIViewController.
Ceci va te permettre alors de rajouter à ta sous-classe MyViewController des variables d'instance pour stocker ce qui t'es nécessaire (par exemple l'URL de l'image à charger), et dans le "viewDidLoad" (ou le "loadView"si tu crées ta vue par le code à la limite mais bon) tu utilises alors cette valeur de ta variable d'instance pour charger l'image voulue. (Non testé, je te laisse vérifier dans Xcode)
Et encore j'ai mis une NSURL qui est transformée par le ViewController en une UIImage, mais tu pourrais directement sur ce même principe passer directement la UIImage à ton ViewController avant de le "pusher", à toi de voir (après si tu veux gérer les cas où l'URL passée est mauvaise, et afficher un truc particulier si l'image n'est pas trouvée, etc, à toi de voir qui du NavigationController parent ou de la MyViewController que tu push est responsable de vérifier ça, question de conception)
Là j'avais trouvé l'idée de passer par un Singleton contenant un tag permettant de faire le switch mais ça fait un peu usine à gaz.
Encore merci !
Pinus
Pinus
je suis nouveau sur le forum et en beta sur objectiveC
J'ai assez bien compris le principe que vous expliquez cependant j'ai une exception levée à cet endroit :
Peut être que j'ai loupé quelque chose...au niveau du nib il y a quelque chose de précis à faire? (hormis de mettre le viewController au file's owner)
Merci d'avance pour vos réponses.
guittonews
EDIT : je vais faire un autre topic vu que le problème est légèrement different...