{"id":8459,"date":"2012-01-23T14:00:42","date_gmt":"2012-01-23T13:00:42","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=8459"},"modified":"2012-03-07T12:25:26","modified_gmt":"2012-03-07T11:25:26","slug":"10-objective-c-uitableview-parte-2","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/10-objective-c-uitableview-parte-2\/","title":{"rendered":"10. Objective-C: UITableView (parte 2)"},"content":{"rendered":"<p>Nella <a href=\"http:\/\/www.devapp.it\/wordpress\/9-objective-c-uitableview.html\" target=\"_blank\">lezione precedente<\/a>, abbiamo visto come risulta facile mostare una serie di elementi all&#8217;interno di una table view. Come primo argomento della lezione di oggi, vedremo come raggruppare una serie di elementi tra loro. Successivamente, sposteremo la nostra attenzione sulla ricerca ed indicizzazione all&#8217;interno di una table view.<!--more--><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-01.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-01.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-01\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-01\" width=\"166\" height=\"320\" class=\"aligncenter size-full wp-image-8464\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-01.png 166w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-01-155x300.png 155w\" sizes=\"auto, (max-width: 166px) 100vw, 166px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Adattamento della sorgente di dati<\/h4>\n<p>Se guardiamo la figura sopra, risulta ovvio come i nostri dati debbano essere raggruppati in due sezioni distinte: nazioni visitate e nazioni da visitare. Abbiamo bisogno, quindi, di modificare la nostra sorgente di dati in maniera da rispecchiare queste informazioni in maniera veloce ed immediata. Come sorgente di dati continueremo ad utilizzare un NSMutableArray. Stavolta, lo popoleremo con due oggetti di tipo <strong>NSDictionary<\/strong>.<\/p>\n<p>Gli oggetti NSDictionary conterranno una coppia chiave\/valore, dove la chiave sara&#8217; una stringa ed il valore sara&#8217; un array contenente tutte le nazioni. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-02.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-02.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-02\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-02\" width=\"550\" height=\"277\" class=\"aligncenter size-full wp-image-8465\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-02.png 636w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-02-300x150.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Creiamo due array: uno contenente le nazioni da visitare e l&#8217;altro contenente quelle gia&#8217; visitate. Gli array sono usati per creare due oggetti NSDicitionary con la chiave &#8220;Countries&#8221;. Entrambi gli oggetti NSDictionary sono aggiunti all&#8217;array della lezione precedente, listOfItems. <\/p>\n<h4>Preparare la UITableView per mostare i dati<\/h4>\n<p>La nostra table view ha bisogno di conoscere quante sezioni dovranno essere mostate a schermo. Quest&#8217;informazione viene ritornata dal metodo <strong>numberOfSectionsInTableView<\/strong>. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-03.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-03.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-03\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-03\" width=\"416\" height=\"76\" class=\"aligncenter size-full wp-image-8466\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-03.png 416w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-03-300x54.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Sara&#8217; necessario conoscere anche il numero di elementi per ogni sezione. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-04.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-04.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-04\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-04\" width=\"548\" height=\"113\" class=\"aligncenter size-full wp-image-8467\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-04.png 548w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-04-300x61.png 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>L&#8217;array listOfItems contiene due elementi dizionario. Il metodo sopra, quindi, verra&#8217; chiamato due volte. Useremo l&#8217;indice dell&#8217;array per distinguere le varie chiamate al metodo (e quindi la sezione attualmente interessata).<br \/>\nTrovato il dizionario corretto, recuperiamo l&#8217;array utilizzando la chiave Countries. Infine, ritorniamo il numero di elementi all&#8217;interno dell&#8217;array. <\/p>\n<h4>Configurazione del testo di intestazione sezione<\/h4>\n<p>Abbiamo configurato il numero di sezioni e le righe per ognuna di esse. Dobbiamo ancora configurare il testo da mostrare all&#8217;inizio di ogni sezione. Quest&#8217;operazione viene effettuata dal metodo <strong>tableView:titleForHeaderInSection<\/strong>. <\/p>\n<p>Visto che il primo dizionario nell&#8217;array listOfItems contiene la lista delle nazioni da visitare ed il secondo quelle gia&#8217; visitate, utilizziamo quest&#8217;informazione per selezionare il valore di <strong>section<\/strong> piu&#8217; adatto. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-05.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-05.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-05\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-05\" width=\"550\" height=\"115\" class=\"aligncenter size-full wp-image-8468\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-05.png 575w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-05-300x62.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Mostrare i nuovi contenuti<\/h4>\n<p>Adesso dobbiamo mostrare i contenuti relativamente alle due sezioni della nostra table view. La logica e&#8217; simile a quella utilizzata nella lezione precedente. Dobbiamo prima trovare quale dizionario utilizzare, attraverso la property <strong>section<\/strong> dell&#8217;oggetto <strong>NSIndexPath<\/strong>. Una volta ottenuta la giusta sezione, utilizziamo l&#8217;array contenuto al suo interno attraverso la chiave Countries. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-06.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-06.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-06\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-06\" width=\"550\" height=\"241\" class=\"aligncenter size-full wp-image-8469\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-06.png 631w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-06-300x131.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Selezionare la riga corretta<\/h4>\n<p>Il metodo tableView:didSelectRowAtIndexPath deve essere modificato in maniera da tenere in considerazione la nuova struttura dati ed aggiornare la table view. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-07.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-07.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-07\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-07\" width=\"550\" height=\"186\" class=\"aligncenter size-full wp-image-8470\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-07.png 573w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-07-300x101.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Navigazione tramite indici<\/h4>\n<p>Un&#8217;altro modo per la navigazione efficiente della sorgente di dati e&#8217; quello di dotare la nostra table view di un indice. La prima cosa da fare e&#8217; creare un&#8217;oggetto per contenere i valori dell&#8217;indice da mostrare; utilizzeremo un NSArray a questo scopo. La documentazione Apple, suggerisce di impostare lo stile della UITableView in UITableViewStylePlain, sebbene non venga generato nessun errore con stili diversi. Il metodo che si occupa di creare e restituire l&#8217;indice delle sezioni e&#8217; <strong>sectionIndexTitlesForTableView<\/strong>: <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-08.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-08.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-08\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-08\" width=\"440\" height=\"141\" class=\"aligncenter size-full wp-image-8471\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-08.png 440w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-08-300x96.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Il metodo crea e ritorna un oggetto array contenente gli elementi da mostrare nella barra degli indici a destra. <\/p>\n<h4>Gestione dell&#8217;evento di selezione indice<\/h4>\n<p>Alla selezione di un elemento nella barra degli indici, viene lanciato un messaggio di tableView:sectionForSectionIndexTitle:atIndex, il quale ritorna l&#8217;indice della sezione da mostrare. Dal momento che abbiamo solo due sezioni nella nostra sorgente di dati, adatteremo questo metodo per tornare sempre le nostre due sezioni. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-09.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-09.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-09\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-09\" width=\"430\" height=\"92\" class=\"aligncenter size-full wp-image-8472\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-09.png 430w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-09-300x64.png 300w\" sizes=\"auto, (max-width: 430px) 100vw, 430px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Ricerca all&#8217;interno di una tableview<\/h4>\n<p>Per dotare la nostra table view di un pannello di ricerca, dobbiamo modificare leggermente il codice sorgente gia&#8217; scritto ed aggiungere alcuni metodi necessari per la corretta gestione dell&#8217;oggetto <strong>UISearchBar<\/strong>. <\/p>\n<p>La prima cosa da fare e&#8217; aggiungere la dichiarazione dei nuovi oggetti e variabili da usare all&#8217;interno della classe MyTableViewController. In particolare, dovremo dotare la nostra classe controllore di un nuovo oggetto denominato UISearchBar e di alcune variabili d&#8217;appoggio necessarie al suo funzionamento. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-10.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-10.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-10\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-10\" width=\"495\" height=\"260\" class=\"aligncenter size-full wp-image-8473\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-10.png 495w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-10-300x157.png 300w\" sizes=\"auto, (max-width: 495px) 100vw, 495px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Dobbiamo modificare il metodo di viewDidLoad, in maniera da inizializzare correttamente le nuove variabili ed i nuovi oggetti appena dichiarati. In particolare, dovremo creare un frame per contenere la UISearchBar e dovremo, successivamente, associare al campo <strong>tableHeaderView<\/strong> il nuovo oggetto creato. Ogni table view ha due properties di tipo UIView personalizzabili dall&#8217;utente, in maniera da ospitare delle viste con contenuti speciali in testa (HeaderView) o in basso (FooterView) alla tableView. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-11.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-11.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-11\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-11\" width=\"400\" height=\"388\" class=\"aligncenter size-full wp-image-8474\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-11.png 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-11-300x291.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>La prima cosa da fare e&#8217; creare un frame atto a contenere il nuovo oggetto. Inizializzeremo, quindi, un array temporaneo per conservare i risultati della ricerca attuale e due variabili booleane indicanti, rispettivamente, una ricerca in corso (searching) e la possibilita&#8217; di selezionare o meno una riga (letUserSelectRow). Dovremo, inoltre, assegnare un delegato per l&#8217;oggetto UISearchBar. Questo significa adottare un nuovo protocollo nella nostra classe controllore ed implementare alcuni metodi per dialogare correttamente con il nuovo oggetto appena creato. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-12.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-12.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-12\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-12\" width=\"550\" height=\"368\" class=\"aligncenter size-full wp-image-8475\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-12.png 624w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-12-300x200.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Gestione degli eventi per la ricerca<\/h4>\n<p>Il protocollo UISearchBarDelegate, offre alcuni metodi per la gestione degli eventi legati alla ricerca. Prima di illustrarli e spiegarli, proviamo ad esaminare un contesto d&#8217;azione tipico legato alla ricerca. Le azioni da intraperendere quando l&#8217;utente inizia la ricerca, cliccando all&#8217;interno dell&#8217;oggetto UISearchBar, possono essere riassunte come segue: <\/p>\n<ul>\n<li>Impostare la variabile booleana searching a YES.<\/li>\n<li>Impostare la variabile booleana letUserSelectRow a NO. <\/li>\n<li>Disabilitare lo scrolling della table view.<\/li>\n<li>Mostrare un tasto per concludere la ricerca (Done).<\/li>\n<li>Iniziare\/continuare la ricerca ad ogni inserimento\/cancellazione di caratteri. <\/li>\n<li>Copiare i risultati in una sorgente di dati separata.<\/li>\n<li>Mostrare i risultati come unica lista.<\/li>\n<li>Nascondere la tastiera e concludere la ricerca. <\/li>\n<\/ul>\n<p>Il primo evento di cui dovremo occuparci e&#8217; quello lanciato con il messaggio <strong>searchBarTextDidBeginEditing<\/strong>. Questo messaggio viene inviato quando l&#8217;utente inizia per la prima volta la ricerca (quando clicca all&#8217;interno della casella di testo presente nella UISearchBar). <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-13.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-13.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-13\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-13\" width=\"550\" height=\"182\" class=\"aligncenter size-full wp-image-8476\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-13.png 551w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-13-300x99.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Abbiamo disabilitato la possibilita&#8217; di effettuare selezioni di righe ed inibito la possibilita&#8217; di effettuare uno scrolling della table view. Il metodo di selezione va&#8217; modificato per rispecchiare il nuovo comportamento: <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-14.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-14.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-14\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-14\" width=\"478\" height=\"125\" class=\"aligncenter size-full wp-image-8477\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-14.png 478w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-14-300x78.png 300w\" sizes=\"auto, (max-width: 478px) 100vw, 478px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Se siamo abilitati a selezionare una riga, ritorniamo l&#8217;indice corretto. Altrimenti, ritorniamo un valore di <strong>nil<\/strong>. <\/p>\n<p>Alla pressione del tasto Done, viene invocato il metodo doneSearchingClicked. Questo metodo dovra&#8217; reimpostare tutte le variabili ad uno stato pre-ricerca. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-15.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-15.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-15\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-15\" width=\"311\" height=\"238\" class=\"aligncenter size-full wp-image-8478\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-15.png 311w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-15-300x229.png 300w\" sizes=\"auto, (max-width: 311px) 100vw, 311px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Modifica del campo di ricerca<\/h4>\n<p>Adesso, dobbiamo preoccuparci di effettuare la ricerca all&#8217;interno della nostra sorgente di dati, basandoci sul contenuto del campo di testo dell&#8217;oggetto UISearchBar. Precedentemente, avevamo impostato come delegato per l&#8217;oggetto in questione la nostra classe MyFirstTableViewController. Questo ci permette di implementare un metodo che &#8220;reagisce&#8221; ai cambiamenti del contenuto del campo di testo sopracitato. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-16.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-16.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-16\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-16\" width=\"515\" height=\"306\" class=\"aligncenter size-full wp-image-8479\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-16.png 515w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-16-300x178.png 300w\" sizes=\"auto, (max-width: 515px) 100vw, 515px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Nel caso in cui il campo di testo ha una lunghezza maggiore di zero, possiamo procedere con la ricerca, invocando il metodo searchTableView. Questo metodo, copiera&#8217; i risultati ottenuti all&#8217;interno della sorgente di dati temporanea copyListOfItems, rendendoli fruibili a tutti gli altri metodi. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-17.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-17.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-17\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-17\" width=\"473\" height=\"331\" class=\"aligncenter size-full wp-image-8480\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-17.png 473w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-17-300x209.png 300w\" sizes=\"auto, (max-width: 473px) 100vw, 473px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Mostrare i risultati della ricerca<\/h4>\n<p>Restano da modificare i metodi che dialogavano con la sorgente di dati listOfItems. Essi dovranno verificare se siamo in presenza di una ricerca attiva (variabile booleana searching). In questo caso utilizzeremo i valori della sorgente di dati temporanea copyListOfItems. <\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-18.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-18.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-18\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-18\" width=\"415\" height=\"87\" class=\"aligncenter size-full wp-image-8481\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-18.png 415w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-18-300x62.png 300w\" sizes=\"auto, (max-width: 415px) 100vw, 415px\" \/><\/a><br \/>\n<\/center><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-19.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-19.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-19\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-19\" width=\"550\" height=\"138\" class=\"aligncenter size-full wp-image-8482\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-19.png 556w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-19-300x75.png 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\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-20.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-20.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-20\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-20\" width=\"550\" height=\"133\" class=\"aligncenter size-full wp-image-8483\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-20.png 571w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-20-300x72.png 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\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-21.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-21.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-21\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-21\" width=\"550\" height=\"279\" class=\"aligncenter size-full wp-image-8484\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-21.png 639w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-21-300x152.png 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\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-22.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-22.png\" alt=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-22\" title=\"objective-C-UITableView-sezioni-e-ricerca-parte-2-22\" width=\"550\" height=\"253\" class=\"aligncenter size-full wp-image-8485\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-22.png 568w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2012\/01\/objective-C-UITableView-sezioni-e-ricerca-parte-2-22-300x137.png 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Riferimenti<\/h4>\n<ul>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/UIKit\/Reference\/UITableView_Class\/Reference\/Reference.html\" target=\"_blank\">iOS Developer Library: UITableView Class Reference<\/a><\/li>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/UIKit\/Reference\/UINavigationController_Class\/Reference\/Reference.html\" target=\"_blank\">iOS Developer Library: UINavigationController Class Reference<\/a><\/li>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/iPhone\/Conceptual\/iPhoneOSProgrammingGuide\/Introduction\/Introduction.html\" target=\"_blank\">iOS Developer Library: iOS Application Programming Guide<\/a><\/li>\n<li><a href=\"http:\/\/developer.apple.com\/library\/ios\/#documentation\/WindowsViews\/Conceptual\/ViewPG_iPhoneOS\/Introduction\/Introduction.html\" target=\"_blank\">iOS Developer Library: View Programming Guide for iOS<\/a><\/li>\n<li><a href=\"http:\/\/www.amazon.it\/gp\/product\/0596154054\/ref=as_li_qf_sp_asin_il_tl?ie=UTF8&#038;tag=de0d-21&#038;linkCode=as2&#038;camp=3370&#038;creative=23322&#038;creativeASIN=0596154054\" target=\"_blank\">iPhone SDK Application Development \u2013 Capitolo 3<\/a><\/li>\n<\/ul>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/banner-allertasoglie-push-tre.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/banner-allertasoglie-push-tre.jpg\" alt=\"banner-allertasoglie-push-tre\" title=\"banner-allertasoglie-push-tre\" width=\"550\" height=\"293\" class=\"aligncenter size-full wp-image-8150\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/banner-allertasoglie-push-tre.jpg 550w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2011\/12\/banner-allertasoglie-push-tre-300x159.jpg 300w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nella lezione precedente, abbiamo visto come risulta facile mostare una serie di elementi all&#8217;interno di una table&#8230;<\/p>\n","protected":false},"author":476,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[605],"tags":[251,117,1031,1037,1036,1033,1035,1004,1032,1034,27],"class_list":["post-8459","post","type-post","status-publish","format-standard","hentry","category-guida-rapida-alla-programmazione-cocoa-touch","tag-nsdictionary","tag-nsindexpath","tag-numberofsectionsintableview","tag-ricerca-tabelle-xcode","tag-searchbartextdidbeginediting","tag-sectionindextitlesfortableview","tag-tableheaderview","tag-tableviewdidselectrowatindexpath","tag-tableviewtitleforheaderinsection","tag-uisearchbar","tag-uitableview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8459","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\/476"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=8459"}],"version-history":[{"count":9,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8459\/revisions"}],"predecessor-version":[{"id":8640,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/8459\/revisions\/8640"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=8459"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=8459"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=8459"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}