{"id":1525,"date":"2014-09-07T13:13:35","date_gmt":"2014-09-07T17:13:35","guid":{"rendered":"http:\/\/tim.cstj.qc.ca\/cours\/xcode\/wp\/?page_id=1525"},"modified":"2014-09-07T13:13:35","modified_gmt":"2014-09-07T17:13:35","slug":"storyboard","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/xcode\/storyboard\/","title":{"rendered":"StoryBoard"},"content":{"rendered":"<h1>Xcode.Storyboard<\/h1>\n<h1>Contenu<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1526\" style=\"margin-right: 50px;\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard4boxes-thumb.png\" alt=\"storyboard4boxes-thumb\" width=\"300\" height=\"232\" \/><br \/>\n&nbsp;<\/p>\n<ol>\n<li><a href=\"#a1\">Naviguer (segue) avec un\u00a0\u00ab\u00a0Navigation Controller\u00a0\u00bb<\/a><\/li>\n<li><a href=\"#a2\">Naviguer avec un \u00ab\u00a0TabBar Controller\u00a0\u00bb<\/a><\/li>\n<li><a href=\"#a3\">Combiner \u00ab\u00a0Navigation Controller\u00a0\u00bb et \u00ab\u00a0TabBar Controller\u00a0\u00bb<\/a><\/li>\n<li><a href=\"#a4\">Naviguer par programmation<\/a><\/li>\n<li><a href=\"#a5\">Naviguer sous un iPad<\/a><\/li>\n<\/ol>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\nWikipedia: <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Segue\">segue<\/a><\/p>\n<hr \/>\n<h1>Objectifs<\/h1>\n<p>\u00c0 la fin de ce module, nous devrions \u00eatre en mesure, gr\u00e2ce au &lsquo;Storyboard&rsquo; de Xcode, de naviguer entre les \u00a0diff\u00e9rentes sc\u00e8nes d&rsquo;un projet. \u00a0De plus, nous saurons comment renseigner des transitions \u00ab\u00a0segue\u00a0\u00bb diff\u00e9rentes.<br \/>\n&nbsp;<\/p>\n<hr \/>\n<p><a name=\"a1\"><\/a><\/p>\n<h1>1 &#8211; Naviguer (segue) avec un\u00a0\u00ab\u00a0Navigation Controller\u00a0\u00bb<\/h1>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.1<\/strong><\/span>\u00a0 &#8211; \u00a0<a href=\"https:\/\/github.com\/puyansude\/Introduction-aux-storyboards\/archive\/master.zip\">T\u00e9l\u00e9charger les apps du projet \u00e0 partir de github<\/a><br \/>\n&nbsp;<br \/>\n<strong>Note<\/strong>: \u00a0<span style=\"color: #ff0000;\"><em>Attention, ce projet contient plusieurs apps, il faut ouvrir le bon groupe. \u00a0M\u00eame chose lors d&rsquo;un test sur l&rsquo;\u00e9mulateur, il faut s&rsquo;assurer d&rsquo;avoir s\u00e9lectionn\u00e9 la bonne app.<\/em><\/span><br \/>\n<strong><span style=\"color: #333399;\">Astuce<\/span><\/strong> &#8211; Lors des tests, si le module n&rsquo;apparait pas dans la liste des sch\u00e9mas, s\u00e9lectionner &lsquo;Manage Schemes&#8230;&rsquo; &#8211; liste \u00e0 droite du bouton &lsquo;stop&rsquo; &#8211; \u00a0suivi par &lsquo;Autocreate Schemes\u00a0now&#8230;&rsquo;<br \/>\n<a href=\"\/xcode\/wp-content\/uploads\/2014\/09\/xcode-schemas.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2625\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/xcode-schemas.png\" alt=\"xcode-schemas\" width=\"406\" height=\"119\" \/><\/a><br \/>\n<a href=\"\/xcode\/wp-content\/uploads\/2014\/09\/autocreate-schemes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2624\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/autocreate-schemes.png\" alt=\"autocreate-schemes\" width=\"770\" height=\"431\" \/><\/a><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.2<\/strong> <\/span>&#8211; Afficher le &lsquo;storyboard&rsquo; de l&rsquo;app &lsquo;<strong>d\u00e9parts.module 01<\/strong>&lsquo; et y ajouter deux (2) &lsquo;ViewController&rsquo;.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1557\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape01.png\" alt=\"storyboard.navigationcontroller.etape01\" width=\"1058\" height=\"798\" \/><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.3<\/strong><\/span> &#8211; Renseigner\u00a0la couleur de fond des trois sc\u00e8nes: bleu, rouge et vert.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1558\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape01b.png\" alt=\"storyboard.navigationcontroller.etape01b\" width=\"1135\" height=\"551\" \/><br \/>\n<span style=\"color: #ff0000;\">NOTE: \u00a0Il faut d\u00e9sactiver la mise en page automatique: \u00a0<\/span><br \/>\n<a href=\"\/xcode\/wp-content\/uploads\/2014\/09\/cap10.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2907\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/cap10.png\" alt=\"cap10\" width=\"251\" height=\"424\" \/><\/a><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.4<\/strong><\/span> &#8211; Renommer\u00a0les objets &lsquo;sc\u00e8nes&rsquo; pour &lsquo;Sc\u00e8ne bleue&rsquo;, &#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1559\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape02.png\" alt=\"storyboard.navigationcontroller.etape02\" width=\"1103\" height=\"601\" \/><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.5<\/strong> <\/span>&#8211; Encapsuler &lsquo;Sc\u00e8ne bleue&rsquo; dans un &lsquo;Navigation controller&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1560\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape03.png\" alt=\"storyboard.navigationcontroller.etape03\" width=\"967\" height=\"682\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.6<\/strong> <\/span>&#8211; Observer le lien entre &lsquo;Navigation Controller&rsquo; et &lsquo;Sc\u00e8ne bleue&rsquo; ainsi que la nouvelle zone au haut de &lsquo;Sc\u00e8ne bleue&rsquo;.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1561\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape04.png\" alt=\"storyboard.navigationcontroller.etape04\" width=\"1230\" height=\"589\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.7<\/strong><\/span> &#8211; Ajouter un UIButton dans la zone de navigation et renseigner ses propri\u00e9t\u00e9s.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1562\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape05.png\" alt=\"storyboard.navigationcontroller.etape05\" width=\"922\" height=\"737\" \/><br \/>\n<span style=\"color: #ff0000;\">Attention &#8211;\u00a0<\/span><span style=\"color: #008000;\">Selon la version de Xcode, il est possible que la zone de navigation soit vide. \u00a0Il faudra alors ajouter un \u00e9l\u00e9ment de type &lsquo;navigation item&rsquo; \u00e0 droite de la barre de navigation.<\/span><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.8<\/strong> <\/span>&#8211; D\u00e9finir un &lsquo;segue&rsquo; de type &lsquo;push&rsquo; entre le bouton et &lsquo;Sc\u00e8ne rouge&rsquo;.<br \/>\n<strong>Note<\/strong>: <span style=\"color: #ff0000;\">Attention<\/span>, il faut cliquer 2 fois sur la zone du bouton pour le s\u00e9lectionner. \u00a0V\u00e9rifier son type dans I4.<br \/>\n&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1563\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape06.png\" alt=\"storyboard.navigationcontroller.etape06\" width=\"1128\" height=\"696\" \/><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1564\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape07.png\" alt=\"storyboard.navigationcontroller.etape07\" width=\"434\" height=\"241\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.9<\/strong><\/span> &#8211; Renseigner les propri\u00e9t\u00e9s du &lsquo;segue&rsquo; .<br \/>\n<strong>Note<\/strong>: le lien entre &lsquo;Sc\u00e8ne bleue&rsquo; et &lsquo;Sc\u00e8ne rouge&rsquo; doit-\u00eatre s\u00e9lectionn\u00e9.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1565\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape08.png\" alt=\"storyboard.navigationcontroller.etape08\" width=\"1030\" height=\"432\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.11<\/strong>\u00a0<\/span>&#8211;\u00a0Renseigner le titre de la zone de navigation de &lsquo;Sc\u00e8ne bleue&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1566\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape09.png\" alt=\"storyboard.navigationcontroller.etape09\" width=\"484\" height=\"346\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.12<\/strong><\/span> &#8211; Tester l&rsquo;application<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignleft wp-image-1567 \" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape10.png\" alt=\"storyboard.navigationcontroller.etape10\" width=\"328\" height=\"508\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1568\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.etape11.png\" alt=\"storyboard.navigationcontroller.etape11\" width=\"327\" height=\"508\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 1.13<\/strong><\/span> &#8211; En laboratoire, \u00a0programmer le segue entre &lsquo;Sc\u00e8ne rouge&rsquo; et &lsquo;Sc\u00e8ne verte&rsquo; puis, tester l&rsquo;application.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1569\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.navigationcontroller.resultat.final_.png\" alt=\"storyboard.navigationcontroller.resultat.final\" width=\"1614\" height=\"548\" \/><br \/>\n<span style=\"color: #008000;\"><strong>Astuce<\/strong><\/span>: Il est possible de glisser un \u00ab\u00a0Navigation Controller\u00a0\u00bb de la librairie vers le &lsquo;Storyboard&rsquo;.<br \/>\n&nbsp;<br \/>\nVoici comment faire pour retourner \u00e0 la sc\u00e8ne pr\u00e9c\u00e9dente par programmation:<\/p>\n<pre class=\"lang:swift decode:true \">       \/\/ Retour au d\u00e9but\n        _ = self.navigationController?.popToRootViewController(animated: true)\n        \/\/ Retour \u00e0 la sc\u00e8ne pr\u00e9c\u00e9dente\n        _ = self.navigationController?.popViewController(animated: true)<\/pre>\n<p>&nbsp;<br \/>\n&nbsp;<\/p>\n<hr \/>\n<p><a name=\"a2\"><\/a><\/p>\n<h1>2 &#8211; Naviguer avec un \u00ab\u00a0TabBar Controller\u00a0\u00bb<\/h1>\n<p><span style=\"color: #ff0000;\"><strong>Action 2.1<\/strong><\/span> &#8211; Ouvrir le projet &lsquo;D\u00e9parts.module 02&rsquo;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.2<\/strong><\/span> &#8211; Encapsulons la sc\u00e8ne bleue dans un &lsquo;Tab Bar Controller&rsquo;: Menu-Editor-Embed In-Tab Bar Controller.<br \/>\n&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1578\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape02.png\" alt=\"storyboard.tabbarcontroller.etape02\" width=\"677\" height=\"682\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.3<\/strong> <\/span>&#8211; Observons le nouveau contr\u00f4leur obtenu.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1579\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape03.png\" alt=\"storyboard.tabbarcontroller.etape03\" width=\"892\" height=\"555\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.4<\/strong><\/span> &#8211; D\u00e9finissons une relation &lsquo;segue&rsquo; entre le &lsquo;Tab Bar controller&rsquo; et la sc\u00e8ne rouge. \u00a0Ctrl+Glisser du <strong>centre<\/strong>\u00a0du TBC vers la sc\u00e8ne \u00e0 lier.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1580\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape04.png\" alt=\"storyboard.tabbarcontroller.etape04\" width=\"879\" height=\"838\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.5<\/strong><\/span>\u00a0&#8211; Renseignons le type &lsquo;segue&rsquo; \u00e0 \u00ab\u00a0view controllers\u00a0\u00bb.<br \/>\n&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1581\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape05.png\" alt=\"storyboard.tabbarcontroller.etape05\" width=\"494\" height=\"419\" \/><br \/>\n&nbsp;<br \/>\nR\u00e9sultat:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1582\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape06.png\" alt=\"storyboard.tabbarcontroller.etape06\" width=\"519\" height=\"651\" \/><br \/>\n&nbsp;<\/p>\n<blockquote><p><strong><span style=\"color: #ff0000;\">NOTE: \u00a0Il est possible (sous Xcode 8) que l&rsquo;affichage soit bris\u00e9. \u00a0Renseigner une image sur l&rsquo;item du &lsquo;tab bar&rsquo; devrait corriger le probl\u00e8me.<\/span><\/strong><\/p><\/blockquote>\n<p><span style=\"color: #ff0000;\"><strong>Action 2.6<\/strong><\/span>\u00a0&#8211; R\u00e9p\u00e9tons l&rsquo;action 2.5 pour la sc\u00e8ne verte.<br \/>\n&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1583\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape07.png\" alt=\"storyboard.tabbarcontroller.etape07\" width=\"689\" height=\"754\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.7<\/strong><\/span>\u00a0&#8211;<br \/>\n&nbsp;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1584\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape08.png\" alt=\"storyboard.tabbarcontroller.etape08\" width=\"743\" height=\"635\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.8<\/strong><\/span>\u00a0&#8211;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1587\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape11.png\" alt=\"storyboard.tabbarcontroller.etape11\" width=\"481\" height=\"743\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.9<\/strong><\/span>\u00a0&#8211; Renseigner le titre de l&rsquo;item<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1585\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape09.png\" alt=\"storyboard.tabbarcontroller.etape09\" width=\"832\" height=\"471\" \/><br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.9b<\/strong><\/span>\u00a0&#8211; Utiliser des ic\u00f4nes syst\u00e8mes sur le bouton menu (&lsquo;Tab Bar Item&rsquo; pour pour la sc\u00e8ne et &lsquo;Bar Item&rsquo; pour le ctrl)<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1586\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape10.png\" alt=\"storyboard.tabbarcontroller.etape10\" width=\"825\" height=\"339\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.10<\/strong><\/span>\u00a0&#8211; Tester l&rsquo;app<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1588\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape12.png\" alt=\"storyboard.tabbarcontroller.etape12\" width=\"481\" height=\"743\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.11<\/strong><\/span>\u00a0&#8211; Parcourir les options.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1589\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape12b.png\" alt=\"storyboard.tabbarcontroller.etape12b\" width=\"663\" height=\"337\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.12<\/strong><\/span>\u00a0&#8211; Personnaliser l&rsquo;ic\u00f4ne du bouton menu avec\u00a0des images livr\u00e9es avec l&rsquo;app.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1590\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape13.png\" alt=\"storyboard.tabbarcontroller.etape13\" width=\"666\" height=\"542\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 2.13<\/strong><\/span>\u00a0&#8211; Tester l&rsquo;application<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1591\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.tabbarcontroller.etape14.png\" alt=\"storyboard.tabbarcontroller.etape14\" width=\"481\" height=\"744\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Note<\/strong><\/span>: \u00a0Il est possible de modifier l&rsquo;ordre des items en les glissant dans la zone menu du TabBarController.<br \/>\n<span style=\"color: #008000;\"><strong>Astuce<\/strong><\/span>: Il est possible de glisser un \u00ab\u00a0TabBar Controller\u00a0\u00bb de la librairie vers le &lsquo;Storyboard&rsquo;.<br \/>\n&nbsp;<\/p>\n<hr \/>\n<p><a name=\"a3\"><\/a><\/p>\n<h1>3 &#8211; Combiner\u00a0\u00ab\u00a0Navigation Controller\u00a0\u00bb et \u00ab\u00a0TabBar Controller\u00a0\u00bb<\/h1>\n<p><span style=\"color: #ff0000;\"><strong>Action 3.1<\/strong><\/span>\u00a0&#8211;\u00a0Ouvrir le storyboard du module 03<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.2<\/strong><\/span>\u00a0&#8211; Observons la structure du &lsquo;Storyboard&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1593\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrldepart.png\" alt=\"stotyboard.tabBar.et.navctrldepart\" width=\"661\" height=\"591\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.3<\/strong><\/span>\u00a0&#8211; Encapsulons les rang\u00e9s &lsquo;XBox&rsquo; et &lsquo;PS4&rsquo; dans un &lsquo;Navigation Controller&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1594\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape01.png\" alt=\"stotyboard.tabBar.et.navctrletape01\" width=\"860\" height=\"573\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.4<\/strong><\/span>\u00a0&#8211; A) Ajoutons des &lsquo;UIButton&rsquo; dans les sections de navigation et B) D\u00e9finissons des liens &lsquo;segue&rsquo; \u00e0 partir des boutons.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1595\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape02.png\" alt=\"stotyboard.tabBar.et.navctrletape02\" width=\"919\" height=\"580\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.4.2<\/strong><\/span>\u00a0&#8211; \u00c0 faire par l&rsquo;\u00e9tudiant<\/p>\n<ul>\n<li>Renseigner les titres<\/li>\n<li>Ajuster les images<\/li>\n<li>Tester les deux &lsquo;Navigation Controller&rsquo; (indice: I4 &#8211; Is initial View Controller)<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.5<\/strong><\/span>\u00a0&#8211; Ajoutons un &lsquo;Tab Bar Controller&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1596\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape03.png\" alt=\"stotyboard.tabBar.et.navctrletape03\" width=\"998\" height=\"714\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.6<\/strong><\/span>\u00a0&#8211; Lier le deuxi\u00e8me &lsquo;Navigation Controller&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1601\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard_tabBar_et_navctrletape04.png\" alt=\"stotyboard_tabBar_et_navctrletape04\" width=\"799\" height=\"681\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.7<\/strong><\/span>\u00a0&#8211; Renseigner le &lsquo;segue&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1598\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape05.png\" alt=\"stotyboard.tabBar.et.navctrletape05\" width=\"584\" height=\"599\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.8<\/strong><\/span>\u00a0&#8211; Nommer les items du menu &lsquo;Tab Bar&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1599\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape06.png\" alt=\"stotyboard.tabBar.et.navctrletape06\" width=\"1144\" height=\"572\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 3.9<\/strong><\/span>\u00a0&#8211; Testons l&rsquo;application.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1600\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/stotyboard.tabBar.et_.navctrletape07.png\" alt=\"stotyboard.tabBar.et.navctrletape07\" width=\"480\" height=\"743\" \/><br \/>\n&nbsp;<\/p>\n<hr \/>\n<p><a name=\"a4\"><\/a><\/p>\n<h1>4 &#8211; Naviguer par programmation<\/h1>\n<p><span style=\"color: #ff0000;\"><strong>Action 4<\/strong><\/span>\u00a0&#8211;\u00a0Ouvrir le storyboard du module 04<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.1<\/strong><\/span>\u00a0&#8211; Observons la structure du &lsquo;Storyboard&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1603\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.ecran01.png\" alt=\"storyboard.par-prog.ecran01\" width=\"1127\" height=\"1076\" \/><br \/>\n<strong>Note<\/strong>: Les images, de la sc\u00e8ne de la rang\u00e9 2, sont des boutons.<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.2<\/strong><\/span>\u00a0&#8211; Tester la relation en une sc\u00e8ne et son contr\u00f4leur &#8211; Associer plusieurs sc\u00e8nes \u00e0 un contr\u00f4leur.<\/p>\n<ul>\n<li>Note: tester avec &lsquo;Is initial Vue Controller&rsquo;<\/li>\n<\/ul>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.2.2<\/strong><\/span>\u00a0&#8211; Cr\u00e9er une classe &lsquo;UIViewController&rsquo; pour la sc\u00e8ne du menu &#8211; print(\u00ab\u00a0je suis le ctrl de la vue menu\u00a0\u00bb)<br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.3<\/strong><\/span>\u00a0&#8211; D\u00e9finir les liens &lsquo;segues&rsquo; entre les boutons du menu et les sc\u00e8nes.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1604\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape02.png\" alt=\"storyboard.par-prog.etape02\" width=\"1920\" height=\"1080\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.4<\/strong><\/span>\u00a0&#8211; Renseigner l&rsquo;action segue de type &lsquo;<span style=\"color: #ff0000;\"><strong>modal<\/strong><\/span>&lsquo; &#8211; Attention, ne pas se fier \u00e0 l&rsquo;image suivante!<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1605\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape03.png\" alt=\"storyboard.par-prog.etape03\" width=\"658\" height=\"634\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.5<\/strong><\/span>\u00a0&#8211; Nommer le lien (facultatif sauf pour segue &lsquo;custom&rsquo;)<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1606\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape04.png\" alt=\"storyboard.par-prog.etape04\" width=\"1518\" height=\"425\" \/><br \/>\nSi:<\/p>\n<blockquote><p><b>Terminating app due to uncaught exception &lsquo;NSInternalInconsistencyException&rsquo;, reason: &lsquo;Could not perform segue with identifier &lsquo;(null)&rsquo;. A segue must either have a performHandler or it must override -perform.&rsquo;<\/b><br \/>\nA<span style=\"color: #ff0000;\">lors le segue n&rsquo;est pas de type \u00ab\u00a0modal&rsquo;<\/span><br \/>\n&nbsp;<\/p><\/blockquote>\n<p><span style=\"color: #ff0000;\"><strong>Action 4.6<\/strong><\/span>\u00a0&#8211; Tester l&rsquo;application &#8211; premier bouton menu<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1607\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape05.png\" alt=\"storyboard.par-prog.etape05\" width=\"726\" height=\"503\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.7<\/strong><\/span>\u00a0&#8211; Tester le bouton \u00ab\u00a0Retour au menu\u00a0\u00bb<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1608\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape06.png\" alt=\"storyboard.par-prog.etape06\" width=\"722\" height=\"505\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.8<\/strong><\/span>\u00a0&#8211; Cr\u00e9er\u00a0une nouvelle classe (\u00e0 partir de UIViewController) pour les sc\u00e8nes &lsquo;plante2&Prime;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1609\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape07.png\" alt=\"storyboard.par-prog.etape07\" width=\"1019\" height=\"485\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.9<\/strong><\/span>\u00a0&#8211; Nommer la classe \u00ab\u00a0<strong>Plante2<\/strong>\u00a0\u00bb &#8211; Attention, ne pas utiliser le nom propos\u00e9 par la capture suivante:<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1610\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape08.png\" alt=\"storyboard.par-prog.etape08\" width=\"734\" height=\"431\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.10<\/strong><\/span>\u00a0&#8211; Lier la classe &lsquo;Pante&rsquo; \u00e0 la sc\u00e8ne plante01<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1611\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape09.png\" alt=\"storyboard.par-prog.etape09\" width=\"947\" height=\"470\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.11<\/strong><\/span>\u00a0&#8211; Cr\u00e9er un lien &lsquo;action&rsquo; sur le bouton de la sc\u00e8ne &lsquo;plante01&rsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1612\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape10.png\" alt=\"storyboard.par-prog.etape10\" width=\"1221\" height=\"492\" \/><br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.12<\/strong><\/span>\u00a0&#8211; Renseigner le type de la connexion et le nom.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1613\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape11.png\" alt=\"storyboard.par-prog.etape11\" width=\"1071\" height=\"408\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.13<\/strong><\/span>\u00a0&#8211; Ajouter le code suivant<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1614\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape12.png\" alt=\"storyboard.par-prog.etape12\" width=\"1192\" height=\"424\" \/><br \/>\n&nbsp;<\/p>\n<pre class=\"lang:swift decode:true\">\/\/ Retour \u00e0 la fen\u00eatre pr\u00e9c\u00e9dente\ndismiss(animated: true, completion: nil)<\/pre>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.14<\/strong><\/span>\u00a0&#8211; Tester l&rsquo;application<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1615\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape13.png\" alt=\"storyboard.par-prog.etape13\" width=\"1423\" height=\"786\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.15<\/strong><\/span>\u00a0&#8211; Renseigner la classe des sc\u00e8nes &lsquo;plante02..04&rsquo; avec la classe &lsquo;Plante&rsquo; puis lier la m\u00e9thode &lsquo;retourAuMenu&rsquo; au trois boutons restants.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1623\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape21.png\" alt=\"storyboard.par-prog.etape21\" width=\"1147\" height=\"572\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.16<\/strong><\/span>\u00a0&#8211; Tester les transitions possibles<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1624\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape22.png\" alt=\"storyboard.par-prog.etape22\" width=\"1664\" height=\"977\" \/><\/p>\n<hr \/>\n<h1>Sc\u00e8ne d&rsquo;introduction par programmation<\/h1>\n<p><span style=\"color: #ff0000;\"><strong>Action 4.26<\/strong><\/span>\u00a0&#8211; Ajouter\u00a0la sc\u00e8ne d&rsquo;introduction suivante suivant:<br \/>\n<strong>Note<\/strong>: \u00a0<em>Xcode\u00a0va cr\u00e9er, pour un nouveau projet, un &lsquo;LunchScreen&rsquo;, par contre, \u00e0 moins de figer l&rsquo;app, il n&rsquo;est pas possible de contr\u00f4ler la dur\u00e9 de son affichage.<\/em><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1625\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape23.png\" alt=\"storyboard.par-prog.etape23\" width=\"506\" height=\"383\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.27<\/strong><\/span>\u00a0&#8211; Cr\u00e9er un classe pour la sc\u00e8ne d&rsquo;intro et\u00a0les associer<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1627\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape25.png\" alt=\"storyboard.par-prog.etape25\" width=\"919\" height=\"983\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.28<\/strong><\/span>\u00a0&#8211; Renseigner le segue de type &lsquo;<span style=\"color: #ff0000;\"><strong>Show<\/strong><\/span>&lsquo;<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1628\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape26.png\" alt=\"storyboard.par-prog.etape26\" width=\"307\" height=\"418\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.29<\/strong><\/span>\u00a0&#8211; Nommer le segue (<span style=\"color: #ff0000;\">Attention, \u00e0 partir de Xcode 8 il faut choisir &lsquo;show&rsquo; comme segue<\/span>).<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1629\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape27.png\" alt=\"storyboard.par-prog.etape27\" width=\"787\" height=\"494\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.30<\/strong><\/span>\u00a0&#8211; Ajouter le code suivant \u00e0 la classe &lsquo;Intro&rsquo;<\/p>\n<pre class=\"lang:swift decode:true \">    override func viewDidLoad() {\n        super.viewDidLoad()\n        DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {\n            self.passerAuMenuPrincipal()\n        }\n        \/* Ou bien:\n        Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(Intro.passerAuMenuPrincipal), userInfo: nil, repeats: false)\n        *\/\n    } \/\/ viewDidLoad()\n    func passerAuMenuPrincipal(){\n        performSegue(withIdentifier: \"versMenuPrincipal\", sender: self)\n    } \/\/ passerAuMenuPrincipal<\/pre>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.31<\/strong><\/span>\u00a0&#8211; Renseigner la sc\u00e8ne d&rsquo;intro comme \u00e9tant la vue principale<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1630\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape28.png\" alt=\"storyboard.par-prog.etape28\" width=\"898\" height=\"416\" \/><br \/>\n&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.32<\/strong><\/span>\u00a0&#8211; Tester les transitions<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1631\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.etape29.png\" alt=\"storyboard.par-prog.etape29\" width=\"557\" height=\"458\" \/><br \/>\n&nbsp;<\/p>\n<hr \/>\n<p>&nbsp;<br \/>\n<span style=\"color: #ff0000;\"><strong>Action 4.33<\/strong><\/span>\u00a0&#8211; Terminer le design et tester l&rsquo;application.<br \/>\n<strong>Note<\/strong>: Police = Snell Roundhand<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1632\" src=\"\/xcode\/wp-content\/uploads\/2014\/09\/storyboard.par-prog.resultat.final_.png\" alt=\"storyboard.par-prog.resultat.final\" width=\"1001\" height=\"739\" \/><br \/>\n&nbsp;<\/p>\n<hr \/>\n<p><a name=\"a5\"><\/a><\/p>\n<h1>Naviguer sous un iPad<\/h1>\n<p>Explications en classe<\/p>\n<hr \/>\n<h6 style=\"text-align: right;\">Document par Alain Boudreault, aka VE2CUY, aka puyansude &#8211; r\u00e9vision du 2015.09.13 pour Xcode 6.4<\/h6>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Xcode.Storyboard Contenu &nbsp; Naviguer (segue) avec un\u00a0\u00ab\u00a0Navigation Controller\u00a0\u00bb Naviguer avec un \u00ab\u00a0TabBar Controller\u00a0\u00bb Combiner \u00ab\u00a0Navigation Controller\u00a0\u00bb et \u00ab\u00a0TabBar Controller\u00a0\u00bb Naviguer par programmation Naviguer sous un iPad &nbsp; &nbsp; Wikipedia: segue Objectifs \u00c0 la fin de ce module, nous devrions \u00eatre en mesure, gr\u00e2ce au &lsquo;Storyboard&rsquo; de Xcode, de naviguer entre les \u00a0diff\u00e9rentes sc\u00e8nes d&rsquo;un projet. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1525","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/pages\/1525","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/comments?post=1525"}],"version-history":[{"count":0,"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/pages\/1525\/revisions"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/xcode\/wp-json\/wp\/v2\/media?parent=1525"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}