{"id":3289,"date":"2010-05-07T14:11:53","date_gmt":"2010-05-07T12:11:53","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3289"},"modified":"2010-05-11T14:26:53","modified_gmt":"2010-05-11T12:26:53","slug":"t039-usiamo-le-uitableview-parte-1-creiamo-e-popoliamo-le-nostre-tabelle","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t039-usiamo-le-uitableview-parte-1-creiamo-e-popoliamo-le-nostre-tabelle\/","title":{"rendered":"T#039 &#8211; Usiamo le UITableView (parte 1): creiamo e popoliamo le nostre tabelle"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-3292\" title=\"Immagine 3\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3.png\" alt=\"\" width=\"52\" height=\"96\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3.png 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3-161x300.png 161w\" sizes=\"auto, (max-width: 52px) 100vw, 52px\" \/> Quella di oggi \u00e8 la prima parte di una serie di tutorial che riguardano la creazione e la gestione delle <strong>UITableView<\/strong>, ovvero le tabelle (per intenderci, come quella che contiene i vostri contatti). Vedremo come crearne una, come gestire la sua configurazione di base e come popolarla di dati. Nei successivi tutorial, invece, vedremo qualche funzionalit\u00e0 in pi\u00f9, fino ad implementare la ricerca all&#8217;interno della tabella stessa. Tornate quindi spesso a trovarci e imparerete a sfruttare anche voi questo componente fondamentale della programmazione per iPhone.<!--more--><\/p>\n<h4>1. Creiamo un nuovo progetto<\/h4>\n<p>Apriamo Xcode e selezioniamo &#8220;File -&gt; New Project&#8221;. Nel men\u00f9 che ci appare selezioniamo &#8220;Navigation-based Application&#8221;, clicchiamo su &#8220;Choose\u2026&#8221;, immettiamo come nome &#8220;tableViewTutorial&#8221; e facciamo clic su &#8220;Save&#8221;. Abbiamo cos\u00ec creato il nostro nuovo progetto.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3290\" title=\"Immagine 1\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-1-300x221.png\" alt=\"\" width=\"300\" height=\"221\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-1-300x221.png 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-1.png 708w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Questo template di Xcode ci fornisce gi\u00e0 una tabella con una barra di navigazione, semplificandoci notevolmente il lavoro!<\/p>\n<p><strong>Nota:<\/strong> <em>questo tutorial funziona con SDK 3.0 e superiori.<\/em><\/p>\n<p>Aprendo il file &#8220;RootViewController.xib&#8221; con Interface Builder possiamo notare la struttura gi\u00e0 pronta, non dovremo toccare niente!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3291\" title=\"Immagine 2\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-2.png\" alt=\"\" width=\"400\" height=\"582\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-2.png 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-2-206x299.png 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-2-103x149.png 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>2. Inseriamo gli elementi della tabella<\/h4>\n<p>A differenza di tutti i passaggi che dovevano essere eseguiti fino al SDK 2.x, dovremo solamente inserire poche righe di codice per avere la nostra tabella gi\u00e0 pronta e funzionante!<\/p>\n<p>Apriamo il file &#8220;RootViewController.h&#8221; e inseriamo la dichiarazione del seguente componente:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@interface RootViewController : UITableViewController {\r\n\tNSMutableArray *lista;\r\n}\r\n\r\n@property (nonatomic, retain) NSMutableArray *lista;\r\n\r\n@end\r\n<\/pre>\n<p>Abbiamo de\ufb01nito un array (riga 2) in cui inseriamo tutti gli elementi che devono poi essere visualizzati nella tabella. Notate che abbiamo utilizzato un NSMutableArray, questo perch\u00e8 dovremo avere la possibilit\u00e0 di poter modi\ufb01care gli elementi che lo compongono (analizzeremo meglio questo aspetto quando sar\u00e0 necessario).<\/p>\n<p>Spostiamoci ora nel \ufb01le &#8220;RootViewController.m&#8221; e inseriamo queste istruzioni:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"RootViewController.h\"\r\n\r\n@implementation RootViewController\r\n\r\n@synthesize lista;\r\n\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n\r\n\tself.title = @\"Prodotti Apple\";\r\n\r\n\t\/\/elementi da visualizzare nella tabella\r\n\tlista = [[NSMutableArray alloc] initWithObjects:@\"iPhone\", @\"iPod\",\r\n\t\t\t @\"iPod Touch\", @\"iMac\", @\"iBook\", @\"MacBook\", @\"MacBook Pro\", @\"Mac Pro\",\r\n\t\t\t @\"PowerBook\", nil]; \r\n\r\n    \/\/ Uncomment the following line to display an Edit button in the navigation bar for this view controller.\r\n    \/\/ self.navigationItem.rightBarButtonItem = self.editButtonItem;\r\n}\r\n<\/pre>\n<p>Analizziamo quello che abbiamo appena scritto. Chi ha gi\u00e0 un minimo di esperienza con la programmazione per iPhone conoscer\u00e0 certamente il metodo &#8220;<strong>viewDidLoad<\/strong>&#8220;: questo viene eseguito subito dopo il caricamento della vista, e ci permette di settare tutte le variabili e tutti i parametri all&#8217;avvio. Per prima cosa abbiamo impostato il titolo alla nostra tabella (riga 10), che apparir\u00e0 nella UINavigationBar presente nella vista. Dopodich\u00e8 viene inizializzata la lista (che \u00e8 un oggetto NSMutableArray), inserendoci i vari elementi (riga 13).<\/p>\n<p>Ora dobbiamo definire i metodi che si occupano di popolare la tabella. Scorrendo il file &#8220;RootViewController.m&#8221; li troverete gi\u00e0 (Xcode li inserisce sempre di default), dovete solo completarli. Iniziamo definendo i seguenti due:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {\r\n    return 1;\r\n}\r\n\r\n\/\/ Setta il numero di righe della tabella .\r\n- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {\r\n    return [lista count];\r\n}\r\n<\/pre>\n<p>Il primo metodo che incontriamo \u00e8 &#8220;<strong>numberOfSectionsInTableView:<\/strong>&#8220;. Il codice da usare \u00e8 sempre questo, in tutte le tabelle che creerete per cui vi interessa avere un&#8217;unica sezione. Se provate a modificare questo valore, infatti, vedrete che (quando eseguirete l&#8217;applicazione) la lista degli oggetti sar\u00e0 ripetuta pi\u00f9 volte. Ovviamente non \u00e8 questa l&#8217;utilit\u00e0 di tale metodo, che, come accennato, permette di creare una tabella con pi\u00f9 sezioni (come l&#8217;applicazione contatti, che \u00e8 suddivisa in sezioni a seconda delle lettere alfabetiche).<\/p>\n<p>Il secondo \u00e8 &#8220;<strong>tableView: numberOfRowInSection:<\/strong>&#8220;, che usiamo per settare il numero di celle in ogni sezione (nel nostro esempio avremo una sola sezione). Questo valore deve corrispondere al numero di elementi che vogliamo inserire nella tabella, quindi quelli contenuti nell&#8217;oggetto &#8220;lista&#8221;.<\/p>\n<p>Ci resta solamente da inserire un metodo, quello che si occupa di inserire gli elementi nelle celle della tabella. Ecco il metodo in questione:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\/\/ Setta il contenuto delle varie celle\r\n- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{\r\n\r\n\tUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@\"cellID\"]; \r\n\r\n\tif (cell == nil){\r\n\t\tcell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@\"cellID\"] autorelease];\r\n\t\t\/\/setta lo stile con cui vengono selezionate le righe\r\n\t\tcell.selectionStyle = UITableViewCellSelectionStyleNone;\r\n\t}\r\n\t\/\/inseriamo nella cello l'elemento della lista corrispondente\r\n\tcell.textLabel.text = [lista objectAtIndex:indexPath.row];\r\n\treturn cell;\r\n}\r\n<\/pre>\n<p>Questo \u00e8 il metodo (fondamentale ed obbligatorio) che si occupa di settare in maniera corretta le celle della tabella. Alla riga 4 troviamo la dichiarazione di una cella, che viene poi allocata alla riga 7. Con l&#8217;istruzione presente alla riga 9 definiamo come deve essere l&#8217;aspetto delle righe quando vengono selezionate dall&#8217;utente. Con questa istruzione l&#8217;utente non potr\u00e0 selezionare nessuna riga, se invece la togliamo avremo la classica selezione con sfondo blu.<br \/>\nAlla riga 12, infine, settiamo il valore contenuto nella cella: esso deve essere letto dall&#8217;array, nella posizione uguale a quella della riga (ricordatevi che la numerazione dell&#8217;array e delle celle partono sempre da zero).<\/p>\n<p>Cliccate ora su &#8220;Build and Go!&#8221;: la nostra tabella inizia a prendere forma!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3292\" title=\"Immagine 3\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3.png\" alt=\"\" width=\"414\" height=\"770\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3.png 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-3-80x150.png 80w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/a><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"Icona Download\" title=\"download_icon\" width=\"33\" height=\"40\" class=\"alignnone size-full wp-image-3385\" \/><\/a> Se avete problemi con il tutorial, questo \u00e8 il\u00a0<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/tableViewTutorial_parte1.zip\">nostro file di progetto<\/a>.<br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quella di oggi \u00e8 la prima parte di una serie di tutorial che riguardano la creazione e&#8230;<\/p>\n","protected":false},"author":254,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[216,88,217,27],"class_list":["post-3289","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-programmazione-iphone","tag-tabelle-iphone","tag-uitableview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3289","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\/254"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3289"}],"version-history":[{"count":14,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3289\/revisions"}],"predecessor-version":[{"id":3389,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3289\/revisions\/3389"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}