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 :



    if ([segue.identifier isEqualToString:@linkSegue]) {

    NSArray *allURLs = [_item objectForKey:@weburl];
    NSString *firstURLStr = [allURLs firstObject];

    UINavigationController *nav = [segue destinationViewController];
    webViewController *secondVC = (webViewController *)nav.topViewController;
    secondVC.urlString = firstURLStr;
    }

  • Joanna CarterJoanna Carter Membre, Modérateur

    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 ?


  • Joanna CarterJoanna Carter Membre, Modérateur

    Et pourquoi passer l'URL comme string ? Pourquoi pas comme NSURL ?




  • 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 ?




    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

  • Joanna CarterJoanna Carter Membre, Modérateur
    mars 2017 modifié #6


    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.


  • Joanna CarterJoanna Carter Membre, Modérateur

    Et, pourquoi veux-tu utiliser un segue modal à  la place d'un segue push ? Avec un UINavigationController, ça paraà®t la même.




  • 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 ;)

  • Joanna CarterJoanna Carter Membre, Modérateur

    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.




  • 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 !


  •  


     


    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

     


    Tu peux personnalisé l'animation de transition avec UINavigationControllerDelegate. Une méthode te permet de lui renseigner l'animation à  utiliser.


Connectez-vous ou Inscrivez-vous pour répondre.