{"id":3730,"date":"2010-06-22T10:28:25","date_gmt":"2010-06-22T08:28:25","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3730"},"modified":"2011-03-01T15:50:09","modified_gmt":"2011-03-01T14:50:09","slug":"t055-sfruttiamo-le-scrollview-per-visualizzare-al-meglio-piu-oggetti","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t055-sfruttiamo-le-scrollview-per-visualizzare-al-meglio-piu-oggetti\/","title":{"rendered":"T#055 &#8211; Sfruttiamo le ScrollView per visualizzare al meglio pi\u00f9 oggetti"},"content":{"rendered":"<p>Ciao a tutti, mi chiamo Andrea Cappellotto e sono da poco entrato nel Team di devAPP come collaboratore. Ho ventuno anni e studio Scienze Informatiche a Trento. Naturalmente come tutti voi ho sempre seguito devAPP e devo dire che mi ha dato una grande mano nei miei progetti. Sviluppo per iPhone da qualche mese, e attualmente (per mia fortuna) \u00e8 diventato anche un lavoro. Ma non perdiamoci troppo in chiacchiere inutili!! Ecco il mio primo tutorial!!<\/p>\n<p>Una limitazione che ho riscontrato fin da subito nello sviluppo di applicazioni mobile \u00e8 lo spazio a disposizione sul display per inserire oggetti\u2026 Soprattutto quando abbiamo bisogno magari di 5-6 campi di testo in un&#8217;unica vista e non abbiamo spazio a sufficienza perch\u00e8 la tastiera, ad esempio, ci occupa molto posto, e cosi<!--more--> cercando in rete tra forum e siti ho trovato questo tutorial.<\/p>\n<p>L&#8217;idea \u00e8 semplicissima, creiamo una vista in cui inseriremo una <strong>ScrollView<\/strong> e poi, al suo interno, tutti i nostri campi di testo. Se il campo di testo \u00e8 gi\u00e0 visibile, allora non scrolleremo la vista, altrimenti, quando cliccheremo su di un campo, faremo in modo che questo si metta automaticamente in un&#8217;area visibile.<\/p>\n<h4>Creiamo il progetto Xcode<\/h4>\n<p>Partiamo creando un nuovo progetto &#8220;View-based Application&#8221; e assegniamogli un nome a piacimento (ad esempio &#8220;scrollView&#8221;).<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3735\" title=\"articolo-1\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-1-300x172.jpg\" alt=\"\" width=\"300\" height=\"172\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-1-300x172.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-1-150x86.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-1.jpg 1003w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Per comodit\u00e0 andremo a lavorare sui file &#8220;scrollViewViewController&#8221;, niente ci impone di utilizzare solo questi, potremmo applicare questo metodo a qualsiasi altra vista.<\/p>\n<p>Partiamo dal file di intestazione &#8220;scrollViewViewController.h&#8221;. Prima di tutto settiamo i delegati, abbiamo bisogno sia dello <strong>UIScrollViewDelegate<\/strong> che dell&#8217; <strong>UITextFieldDelegate<\/strong>. Creiamo quindi tre campi di testo e un&#8217;UIScrollView asseggnando a tutti e 4 il relativo IBOutlet, inseriamo infine un&#8217; UITextField che servir\u00e0 per determinare in quale campo di testo l&#8217;utente sta scrivendo e una variabile booleana per decidere se quel campo di testo \u00e8 da spostare o meno.<\/p>\n<p>Ecco come si presenta il nostro file .h modificato:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3734\" title=\"articolo-2\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2-300x164.jpg\" alt=\"\" width=\"300\" height=\"164\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2-300x164.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2-1024x561.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2-150x82.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-2.jpg 1092w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Salviamo e passiamo ad inserire gli oggetti nell&#8217;interfaccia grafica.<\/p>\n<h4>Creiamo l&#8217;interfaccia grafica<\/h4>\n<p>Apriamo il file &#8220;ScrollViewViewController.xib&#8221; tramite semplice doppio click e si aprir\u00e0 Interface Builder. Sull&#8217;ispector sar\u00e0 presente una View, cancelliamola e inseriamo al suo posto una Scrollview che possiamo prelevare dalla libreria degli oggetti disponibili. Inseriamo ora tre TextField: due nella parte superiore della vista e una in quella inferiore. Dovremmo ottenere qualcosa di simile a quanto mostrato qui in basso:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3733\" title=\"articolo-3\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3-300x187.jpg\" alt=\"\" width=\"300\" height=\"187\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3-300x187.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3-1024x640.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3-150x93.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-3.jpg 1440w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>A questo punto non ci resta che collegare i textField e la scrollView con gli oggetti dichiarati precedentemente via Xcode. Sulla finestra <em>Ispector<\/em> premete <em>ctrl<\/em> e tenendolo premuto cliccate sul <em>File&#8217;s Owner<\/em>, si aprir\u00e0 una finestra. Cliccate sul pallino sulla destra di ogni oggetto e tenendo cliccato collegate la freccia con il rispettivo dell&#8217;interfaccia utente appena disegnato. Ripetete questa operazione per tutti i campi di testo e la scrollView. Collegate anche view alla scrollView disegnata prima. Collegate infine il delegate con i campi di testo e la scrollView. Ecco come dovrebbe essere il risultato finale:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3732\" title=\"articolo-4\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4-300x187.jpg\" alt=\"\" width=\"300\" height=\"187\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4-300x187.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4-1024x640.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4-150x93.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-4.jpg 1440w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-5.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3731\" title=\"articolo-5\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-5-300x236.jpg\" alt=\"\" width=\"300\" height=\"236\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-5-300x236.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-5-150x118.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-5.jpg 321w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Anche questa parte \u00e8 finita, passiamo ora al file di implementazione .m<\/p>\n<h4>Implementiamo i nostri metodi<\/h4>\n<p>Decommentiamo il metodo &#8220;viewDidLoad&#8221; e inseriamo 2 notifiche. Le notifiche servono per eseguire un metodo quando si verifica un determinato evento, in questo caso quando la tastiera compare e scompare. Su <em>selector<\/em> indichiamo il metodo da eseguire, su <em>nome<\/em> indichiamo quale evento si vuole notificare, mentre su <em>object<\/em> a quale oggetto vogliamo applicare tale notifica. In questo caso la notifica va applicata a qualsiasi cosa e per questo <em>object<\/em> \u00e8 impostato a <em>nil<\/em>.<\/p>\n<p>Il primo metodo che andiamo a vedere \u00e8 <strong>textFieldDidBeginEditing:<\/strong>.<\/p>\n<p>Questo metodo ci fornisce il TextField in cui l&#8217;utente ha cliccato. Noi non facciamo altro che impostare l&#8217;ActiveField uguale a questo campo, in modo da poter sapere di quanto spostare la scrollView.<\/p>\n<p>Passiamo ora ad esaminare i prossimi due metodi, <strong>keyboardWasShown:<\/strong> e <strong>keyboardWasHidden:<\/strong><\/p>\n<p>Questi metodi si occuperanno di far traslare la nostra scrollView per rendere il campo automaticamente visibile.<\/p>\n<p>Su <em>keyboardWasShown:<\/em> la prima cosa che andiamo a controllare \u00e8 se il campo ActiveField (campo in cui l&#8217;utente ha cliccato) \u00e8 uguale al primo o al secondo campo di testo, e in questo caso non facciamo altro che settare la variabile booleana a <em>false<\/em>, in modo che quando la tastiera scomparir\u00e0 non dovremmo rispostare la vista.<\/p>\n<p>Se il nostro campo di testo \u00e8 il terzo allora entriamo nella condizione else e qui prendiamo le dimensioni della tastiera, e settiamo di quanto spostare\u00a0 la vista. In questo caso il valore 120 \u00e8 la distanza dal campo di testo al punto 0 della vista. Queste sei righe sono sempre valide, e scusate se non le spiego una ad una, ma mi dilungherei troppo.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-6.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3737\" title=\"articolo-6\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-6-300x175.jpg\" alt=\"\" width=\"300\" height=\"175\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-6-300x175.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-6-150x87.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-6.jpg 911w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p><em>keyboardWasHidden:<\/em> non fa altro che risettare lo spostamento della vista ai valori originali sempre se il metodo precendete ha spostato la vista e quindi <em>keyboardShown<\/em> \u00e8 vero.<\/p>\n<p>L&#8217;ultima cosa da fare \u00e8 quella di impostare il ritorno della tastiera quando si clicca su <em>return<\/em>, per farlo basta aggiungere il metodo <em>textFieldShouldReturn:<\/em> che non fa altro che rimuovere la tastiera al campo di testo attivo.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-7.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3736\" title=\"articolo-7\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-7-300x169.jpg\" alt=\"\" width=\"300\" height=\"169\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-7-300x169.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-7-150x84.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/06\/articolo-7.jpg 777w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Spero che questo piccolo tutorial vi sia stato utile.<\/p>\n<p>Ciao Ragazzi e se avete dubbi non esitate a scrivere!!<\/p>\n<p>Buon Lavoro<br \/>\nAndrea<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao a tutti, mi chiamo Andrea Cappellotto e sono da poco entrato nel Team di devAPP come&#8230;<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[270,274,273,275,269,271,272],"class_list":["post-3730","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-cappellotto","tag-keyboardwashidden","tag-keyboardwasshown","tag-textfieldshouldreturn","tag-uiscrollview","tag-uiscrollviewdelegate","tag-uitextfielddelegate"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3730","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\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3730"}],"version-history":[{"count":7,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3730\/revisions"}],"predecessor-version":[{"id":6013,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3730\/revisions\/6013"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}