{"id":8037,"date":"2011-12-01T14:03:45","date_gmt":"2011-12-01T13:03:45","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=8037"},"modified":"2011-12-01T14:03:45","modified_gmt":"2011-12-01T13:03:45","slug":"t103-introduzione-all-uso-di-storyboard","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t103-introduzione-all-uso-di-storyboard\/","title":{"rendered":"T#103 &#8211; Introduzione all&#8217;uso di Storyboard"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-00.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-00.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-00\" title=\"t103-usare-storyboard-xcode-introduzione-00\" width=\"164\" height=\"93\" class=\"alignleft size-full wp-image-8074\" \/><\/a> Avrete ormai capito che l&#8217;accoppiata iOS 5 e Xcode 4.2 ha portato tantissime novit\u00e0 per noi programmatori iPhone e iPad. Alcune di queste comportano delle vere piccole rivoluzioni nel &#8220;vecchio&#8221; modo di programmare.<br \/>\nMi riferisco soprattutto ad ARC (ne abbiamo parlato <a href=\"http:\/\/www.devapp.it\/wordpress\/introduzione-ad-arc-automatic-reference-counting.html\" target=\"_blank\">qui<\/a>) e all&#8217;argomento oggetto di questo nuovo tutorial: <strong>Storyboard<\/strong>.<!--more--><\/p>\n<h4>Ma cos&#8217;\u00e8 Storyboard?<\/h4>\n<p>Storyboard \u00e8 un nuovo modo introdotto da Apple per disegnare le interfacce grafiche dei nostri programmi iPhone e iPad, ma soprattutto per gestire la navigazione tra i vari viewcontroller.<\/p>\n<p>Su tutti i forum dedicati ad iOS (anche <a href=\"http:\/\/forum.devapp.it\" target=\"_blank\">sul nostro)<\/a> le domande pi\u00f9 ricorrenti riguardano proprio il passaggio tra una view e un&#8217;altra, dimostrazione che la logica dietro ai viewcontroller non viene facilmente compresa.<\/p>\n<p>Storyboard si prefigge proprio questo scopo: fornire un modo semplice, grafico e per quanto sia possibile privo di codice, per navigare tra i viewcontroller che compongono la nostra applicazione.<\/p>\n<p>Ma storyboard non \u00e8 solo questo, perch\u00e9 ha introdotto tante altre novit\u00e0 nella gestione delle tableview e delle celle personalizzate (sembra che alla Apple leggano i forum per cercare i topic pi\u00f9 frequenti!)<\/p>\n<h4>Il nostro progetto introduttivo a Storyboard<\/h4>\n<p>Oggi impareremo ad usare storyboard creando lo scheletro di una applicazione tipica, dotata di tabbarviewcontroller e di navigationcontroller, non entrer\u00f2 nel dettaglio di tutte le funzioni, ma alla fine di questo articolo sarete in grado di utilizzarlo con successo nelle vostre applicazioni.<\/p>\n<p>Bench\u00e9 questo sia un articolo introduttivo va considerato come un &#8220;aggiornamento&#8221; quindi ho dato per scontato che il lettore conosca gi\u00e0 cos&#8217;\u00e8 un viecontroller, come si crea una nuova classe su Xcode e come si popoli una tableview, se non avete chiari questi concetti date una lettura alle nostre precedenti guide e parliamone sul forum.<\/p>\n<p>Apriamo Xcode ed iniziano con il nostro progetto. Per semplicit\u00e0 partiremo con un progetto per iPhone utilizzando il template &#8220;single view application&#8221;. Io ho chiamato il mio &#8220;devappStoryBoards&#8221;. Assicuriamoci che sia spuntata la voce &#8220;Use Storyboard&#8221; e &#8220;Use Automatic Retain Counter&#8221;.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-01.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-01\" title=\"t103-usare-storyboard-xcode-introduzione-01\" width=\"550\" height=\"369\" class=\"aligncenter size-full wp-image-8077\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-01.jpg 752w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-01-300x201.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Notiamo all&#8217;apertura del progetto che non sono presenti i classici file xib per il disegno dell&#8217;interfaccia, ma al suo posto \u00e8 presente un unico file &#8220;<strong>Mainstoryboard.storyboard<\/strong>&#8220;, dentro questo file andremo a gestire sia la grafica dei singoli viewcontroller che la navigazione tra di essi.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-02.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-02\" title=\"t103-usare-storyboard-xcode-introduzione-02\" width=\"550\" height=\"332\" class=\"aligncenter size-full wp-image-8078\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-02.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-02-300x181.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Selezionando il file noteremo che \u00e8 gi\u00e0 presente un primo viewcontroller, o meglio una &#8220;scena&#8221;, come preferisce chiamarle Apple in questo caso. Una freccia entrante sulla sinistra indica che questa scena \u00e8 la prima scena che verr\u00e0 visualizzata. Tale opzione \u00e8 modificabile attraverso l&#8217;opzione dell&#8217;inspector che vedete in questa immagine:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-03.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-03\" title=\"t103-usare-storyboard-xcode-introduzione-03\" width=\"261\" height=\"213\" class=\"aligncenter size-full wp-image-8079\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Possiamo gestire la grafica di questo viewcontroller come abbiamo sempre fatto, trascinando gli oggetti dalla libreria direttamente sulla scena desiderata.<\/p>\n<p><strong>ATTENZIONE:<\/strong> per poter trascinare gli oggetti \u00e8 necessario che non sia attivo lo zoom, quindi, se non riuscite a rilasciare gli oggetti, fate semplicemente doppio click su un&#8217;area vuota per riportare tutto alle dimensioni normali.<\/p>\n<p>Nell&#8217;esempio che vi sto mostrando ho trascinato un paio di controlli (fatelo anche voi fino ad ottenere l&#8217;effetto desiderato) quindi ho compilato il progetto ed ecco il risultato:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-04.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-04\" title=\"t103-usare-storyboard-xcode-introduzione-04\" width=\"396\" height=\"744\" class=\"aligncenter size-full wp-image-8080\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-04.jpg 396w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-04-159x300.jpg 159w\" sizes=\"auto, (max-width: 396px) 100vw, 396px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>TabBarViewcontroller con Storyboard<\/h4>\n<p>Andiamo avanti con il nostro progetto, ci eravamo prefissati di creare un&#8217;applicazione con un tabBarViewController&#8230; quindi, ora che abbiamo preso un po&#8217; la mano, cancelliamo il viewcontroller che abbiamo personalizzato poco fa e trasciniamo al centro dell&#8217;area di lavoro un tabBarViewController. Vi servir\u00e0 uno schermo piuttosto grande per visualizzare tutto contemporaneamente. Appariranno infatti nello schermo tre scene: il tabBarController e due viewController generici collegati da una freccia.<\/p>\n<p>Il significato \u00e8 piuttosto intuitivo: il tabBarController \u00e8 il &#8220;contenitore&#8221; e gli altri due viewController sono i &#8220;contenuti&#8221;. Questa relazione \u00e8 identificabile dal simbolo che vedete in foto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-05.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-05\" title=\"t103-usare-storyboard-xcode-introduzione-05\" width=\"334\" height=\"403\" class=\"aligncenter size-full wp-image-8082\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-05.jpg 334w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-05-248x300.jpg 248w\" sizes=\"auto, (max-width: 334px) 100vw, 334px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Personalizziamo a piacere i due viewcontroller e proviamo a compilare l&#8217;applicazione&#8230; Che ne dite? Abbiamo ottenuto un ottimo risultato senza aver scritto neanche una riga di codice.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-06.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-06\" title=\"t103-usare-storyboard-xcode-introduzione-06\" width=\"550\" height=\"393\" class=\"aligncenter size-full wp-image-8083\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-06.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-06-300x214.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-07.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-07.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-07\" title=\"t103-usare-storyboard-xcode-introduzione-07\" width=\"500\" height=\"469\" class=\"aligncenter size-full wp-image-8084\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-07.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-07-300x281.jpg 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Navigationcontroller e Storyboard<\/h4>\n<p>Passiamo ora ad aggiungere alla nostra applicazione un navigationController, lo scopo \u00e8 quello di visualizzare in un terzo pulsante del tabBarController una tableView per visualizzare delle informazioni<br \/>\nPer farlo vedremo una nuova funzionalit\u00e0: trasciniamo nell&#8217;area di lavoro un tableViewController e, una volta selezionato, selezioniamo dal men\u00f9 &#8220;Edit-&gt;Embed in-&gt;Navigation controller&#8221; questo far\u00e0 apparire nell&#8217;area di lavo un navigationcontroller gi\u00e0 collegato al nostro tableviewcontroller:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-08.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-08.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-08\" title=\"t103-usare-storyboard-xcode-introduzione-08\" width=\"550\" height=\"302\" class=\"aligncenter size-full wp-image-8085\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-08.jpg 550w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-08-300x164.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Per far funzionare il tutto ci manca ancora un ultimo passaggio: collegare il navigation controller al tabBarController che abbiamo gi\u00e0 creato. Anche in questo caso \u00e8 tutto molto semplice infatti baster\u00e0 cliccare con il tasto destro del mouse sul tabBarController, trascinare il puntatore sul navigationController e scegliere infine &#8220;relationship&#8221; nel men\u00f9 che appare.<\/p>\n<p>L&#8217;effetto finale \u00e8 questo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-09.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-09.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-09\" title=\"t103-usare-storyboard-xcode-introduzione-09\" width=\"550\" height=\"400\" class=\"aligncenter size-full wp-image-8086\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-09.jpg 970w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-09-300x218.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se proviamo ad eseguire il nostro progetto vedremo che ora cliccando sul terzo tabItem apparir\u00e0 la tableView con tanto di barra del navigationController.<\/p>\n<p>Vi sarete accorti per\u00f2 che non abbiamo inserito n\u00e9 IBOutlet n\u00e9  IBAction e soprattutto che la tabella \u00e8 vuota. Questo perch\u00e9 gli oggetti che abbiamo trascinato nell&#8217;area di lavoro sono dei controller generici, non sono i <b>nostri<\/b> viewcontroller.<\/p>\n<p>Possiamo creare quindi i nostri viewcontroller tramite il men\u00f9 &#8220;file-&gt;new-&gt;new file&#8221;. Nel nostro esempio ho creato un tableViewController:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-10.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-10.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-10\" title=\"t103-usare-storyboard-xcode-introduzione-10\" width=\"550\" height=\"366\" class=\"aligncenter size-full wp-image-8088\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-10.jpg 550w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-10-300x199.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ed ho selezionato il tableViewController presente nell&#8217;area di lavoro modificando la sua propriet\u00e0 Class come si vede in foto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-11.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/t103-usare-storyboard-xcode-introduzione-11.jpg\" alt=\"t103-usare-storyboard-xcode-introduzione-11\" title=\"t103-usare-storyboard-xcode-introduzione-11\" width=\"280\" height=\"275\" class=\"aligncenter size-full wp-image-8089\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Avrete ormai capito che l&#8217;accoppiata iOS 5 e Xcode 4.2 ha portato tantissime novit\u00e0 per noi programmatori&#8230;<\/p>\n","protected":false},"author":53,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[981,983,982,984,985,568],"class_list":["post-8037","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-mainstoryboard-storyboard","tag-navigationcontroller","tag-storyboard-xcode","tag-tabbarviewcontroller","tag-usare-storyboard-xcode","tag-viewcontroller"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/53"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=8037"}],"version-history":[{"count":21,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8037\/revisions"}],"predecessor-version":[{"id":8097,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8037\/revisions\/8097"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=8037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=8037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=8037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}