{"id":3346,"date":"2010-05-10T09:50:37","date_gmt":"2010-05-10T07:50:37","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3346"},"modified":"2010-05-11T14:25:41","modified_gmt":"2010-05-11T12:25:41","slug":"t040-usiamo-le-uitableview-parte-2-modifichiamo-le-celle-e-intercettiamone-il-tocco","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t040-usiamo-le-uitableview-parte-2-modifichiamo-le-celle-e-intercettiamone-il-tocco\/","title":{"rendered":"T#040 \u2013 Usiamo le UITableView (parte 2): Modifichiamo le celle e intercettiamone il tocco"},"content":{"rendered":"<p>Eccoci con il secondo tutorial dedicato alle UITableView. Nella prima parte\u00a0abbiamo visto come creare una tabella ed inserire dei dati. La nostra tabella, per\u00f2, non permetteva nessuna interazione con l&#8217;utente. Oggi vedremo proprio come aggiungere alcune funzioni indispensabili per un&#8217;applicazione che sfrutti le tabelle: vedremo come gestire la selezione di una cella, e implementeremo una &#8220;barra&#8221; da cui potremo eliminare le celle che non ci interessano pi\u00f9.<\/p>\n<h4>1. Modificare la tabella: l&#8217;evento edit<\/h4>\n<p>La prima cosa da fare \u00e8 inserire un tasto che ci permetta di accedere alla modifica della tabella. Per fare ci\u00f2 ci basta &#8220;scommentare&#8221; una riga che dovreste gi\u00e0 trovare nel metodo viewDidLoad (riga 12):<!--more--><\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\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>Tutto molto semplice e veloce grazie alle API di Apple.<\/p>\n<p>Se provate ad eseguire l&#8217;applicazione noterete che cancellando una riga essa non viene rimossa dalla tabella. Questo succede perch\u00e8 non abbiamo ancora concluso di implementare questa funzionalit\u00e0. Inseriamo, quindi, il seguente metodo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\/\/ Elimina l'elemento dalla tabella e dalla lista\r\n- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { \r\n\r\n\t\/\/controlla se l'azione compiuta \u00e8 un'eliminazione\r\n\tif (editingStyle == UITableViewCellEditingStyleDelete) {\r\n\t\t\/\/elimina l'elemento dalla lista\r\n\t\t[lista removeObjectAtIndex:indexPath.row];\r\n\t\t\/\/elimina le'elemento dalla tabella\r\n\t\t[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];\r\n\r\n\t}\r\n}\r\n<\/pre>\n<p>Come possiamo notare dalla struttura, anche se un po&#8217; complicata, questo \u00e8 un metodo del protocollo UITableView, proprio come quello che abbiamo implementato nella prima parte.<br \/>\nIl costrutto if (riga 5) esegue un controllo che, come spiega il commento, controlla se l&#8217;azione eseguita sulla tabella \u00e8 di cancellazione di una riga. Direte voi: &#8220;Cosa posso fare d&#8217;altro?&#8221; Per ora niente, perch\u00e8 la nostra tabella supporta solo l&#8217;eliminazione di una riga, ma volendo si potrebbe implementare anche l&#8217;inserimento di una nuova riga oppure altre azioni. \u00c8 sempre questo metodo che si occupa di gestire tutte le azioni sulla tabella. Ecco spiegata la necessit\u00e0 di questo controllo. Tornando al codice, all&#8217;interno dell&#8217;if possiamo notare due istruzioni, che eliminano di fatto l&#8217;elemento sia dalla lista (riga 7) che dalla tabella (riga 9). In questo modo la cancellazione di una riga \u00e8 davvero implementata.<\/p>\n<h4>2. Rendiamo le celle selezionabili<\/h4>\n<p>Vediamo ora di implementare un&#8217;altra funzione. Vogliamo che quando l&#8217;utente seleziona una cella appaia un pop-up che contenga il nome dell&#8217;elemento selezionato. Ovviamente questa azione non ha una grande utilit\u00e0, ma vi permetter\u00e0 di imparare come gestire le selezioni dell&#8217;utente e vedrete, inoltre, come creare un pop-up.<\/p>\n<p>Prima di implementare il metodo necessario, eliminate dal metodo<br \/>\n&#8220;tableView: cellForRowAtIndexPath:&#8221; la seguente istruzione (vi ho spiegato nella prima parte a cosa serviva):<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\ncell.selectionStyle = UITableViewCellSelectionStyleNone;\r\n<\/pre>\n<p>altrimenti le celle non saranno selezionabili.<\/p>\n<p>Sempre nel file &#8220;RootViewController.m&#8221; inserite ora questo metodo:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n\/\/ Se selezioniamo una riga appare un pop-up con l'elemento in questione\r\n- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {\r\n\tUIAlertView *popUp = [[UIAlertView alloc] initWithTitle:@\"Hai selezionato:\"\r\n\t\t\t\t\t\t\tmessage:[lista objectAtIndex:indexPath.row] delegate:self cancelButtonTitle:@\"OK\" otherButtonTitles:nil];\r\n\t[popUp show];\r\n\t[popUp release];\r\n}\r\n<\/pre>\n<p>Questo \u00e8 il metodo che si occupa di eseguire una certa azione quando l&#8217;utente seleziona una cella. Alla riga 3 possiamo notare la definizione del pop-up (UIAlertView), che conterr\u00e0 un messaggio con il nome della cella selezionata. \u00c8 possibile creare pop-up con diversi bottoni o pi\u00f9 messaggi, vi baster\u00e0 guardare la documentazione per trovare tutte le varianti possibili.<br \/>\nAlla riga 6, infine, viene mostrato il pop-up appena definito.<\/p>\n<p>Clicchiamo su &#8220;Build and Go!&#8221; e gustiamoci la nostra applicazione con le nuove funzionalit\u00e0!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-11.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-3347\" title=\"Immagine 1\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-11.png\" alt=\"\" width=\"414\" height=\"770\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-11.png 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/Immagine-11-161x300.png 161w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Nella prossima parte di questo tutorial vedremo come implementare un box per la ricerca, proprio come avviene nell&#8217;applicazione nativa Contatti!<\/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 <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/tableViewTutorial_parte2.zip\">nostro file di progetto<\/a>.<br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eccoci con il secondo tutorial dedicato alle UITableView. Nella prima parte\u00a0abbiamo visto come creare una tabella ed&#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,218,88,217,219,27],"class_list":["post-3346","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-andrea-busi","tag-modifica-uitable","tag-programmazione-iphone","tag-tabelle-iphone","tag-uitable-edit","tag-uitableview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3346","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=3346"}],"version-history":[{"count":10,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3346\/revisions"}],"predecessor-version":[{"id":3388,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3346\/revisions\/3388"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}