Passer une URL avec un segue via navigation controller
Bonjour,
Je souhaite faire passer une URL au moyen d'un segue vers un second controller qui me permet d'afficher la page web (uiwebview)
J'arrive à le faire avec un segue de type push vers le second controller avec un identifier.
L'URL passe sans problème voici mon code :
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@linkSegue]) {
NSArray *allURLs = [_item objectForKey:@weburl];
NSString *firstURLStr = [allURLs firstObject];
webViewController *svc = (webViewController *)[segue destinationViewController];
svc.urlString = firstURLStr;
}}
Cependant pour des besoins d'ergonomie je souhaite ajouter un Navigation Controller entre les deux controllers.
Autrement dit le segue se ferait indirectement car il passerait par le NavigationController:
premier controller URL ==> segue (identifier) ==> navigation controller ==> relationship segue (root view) ==> second controller
Ma question: comment indiquer dans mon prepareForSegue que le destinationViewController est le navigationcontroller puis lui faire passer l'URL vers le second VC ?
(je ne sais pas si je suis clair, n'hésitez pas à me demander des précisions)
merci par avance (eh oui, c'est de l'objective C ^_^)
Réponses
Bon, déjà résolu, j'ai trouvé ma solution en l'expliquant ci-dessus (parfois ça aide!)
voici le code si ça intéresse quelqu'un :
Bah non !!!
Tu ne devrais pas mettre le deuxième viewController dans un UINavigationController. Il faut mettre le premier la dedans et puis, le segue mettra la deuxième sur la pile, en fournissant le bouton "back" au même temps.
Si tu n'emballes pas le premier dans un UINavigationController, comment fais-tu le segue push ?
Et pourquoi passer l'URL comme string ? Pourquoi pas comme NSURL ?
Merci Joanna, oui je n'avais pas précisé qu'effectivement j'emballais le premier controller dans un UINavigationController, ainsi ça fonctionnait, mais j'avais besoin de pouvoir faire un segue de type "modal", la seconde solution me convient davantage
Dans ce cas là , à la place d'emballer le deuxième viewController, il suffit d'ajouter un UINavigationBar dans la vue.
Et, pourquoi veux-tu utiliser un segue modal à la place d'un segue push ? Avec un UINavigationController, ça paraà®t la même.
Pour des raisons ergonomiques: je veux que l'écran s'affiche avec un mouvement "vers le haut" et fait apparaà®tre l'intégralité du screen sans tabbar. Le second controller peut "dismiss" l'écran vers le bas
Du coup, comme j'ai dit - n'utilise pas un deuxième UINavigationController ; il y aurait les effets secondaires qui peut être cachés.
Le UINavigationBar te donnera la même apparence mais en évitant la pénalité en memoire et fonctionnalité du deuxième contrôleur.
Ok encore merci beaucoup pour tes conseils Joanna !
Tu peux personnalisé l'animation de transition avec UINavigationControllerDelegate. Une méthode te permet de lui renseigner l'animation à utiliser.