Il comportamento classico delle applicazioni iOS quando l'utente tocca una cella di una tabella è quello di caricare il contenuto associato in un nuovo View Controller che rimpiazza quello contenente la tabella per mezzo di un'animazione. Questo comportamento standard viene implementato per mezzo dell'oggetto UINavigationController
(costituito da una barra che verrà mostrata nella parte alta dello schermo) che si occuperà della gestione dei contenuti (mostrare il dettaglio della cella selezionata e tornare al view controller contenente la tabella).
Per implementarlo abbiamo bisogno di aggiungere una linea di codice nel file AppDelegate.m
dopo la dichiarazione dell'oggetto ListViewController
:
UINavigationController * listNav = [[UINavigationController alloc]initWithRootViewController:listViewController];
Infine sostituiamo la linea dove aggiungevamo l'oggetto listViewController
all'array controllers
come segue:
[controllers addObject:listNav];
Adesso, effettuando un Run del progetto, vedremo la schermata relativa all'oggetto ListViewController
come nel seguente screenshot:
Come possiamo vedere è apparso il navigation controller che abbiamo inserito, nella parte alta dello schermo. Adesso dobbiamo prima di tutto creare un nuovoView Controller chiamato FruitDetailViewController
e poi implementare, nel fileListViewController.m
un nuovo metodo di delegato della tabella come segue (prima effettuiamo l'import della classse FruitDetailViewController
):
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [tableView deselectRowAtIndexPath:indexPath animated:YES]; FruitDetailViewController * fruitDetail = [[FruitDetailViewController alloc]init]; [self.navigationController pushViewController:fruitDetail animated:YES]; }
Quello che facciamo all'interno del metodo è, nella prima linea, deselezionare la cella toccata dall'utente, creare un oggetto di tipo FruitDeatailViewController
e poi richiamare il metodo pushViewController: animated:
per mostrare il nuovoViewController.
Dato che le nostre celle, una volta selezionate, andranno a mostrare del contenuto aggiuntivo è necessario informare l'utente di questa funzionalità aggiungendo la seguente linea di codice nel metodo tableView: cellForRowAtIndexPath:
prima della linea di codice return cell
:
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
Questa linea farà apparirà un triangolino nero alla destra di ogni cella che appunto indicherà l'utente la presenta di contenuto aggiuntivo.
Effettaundo un Run del progetto e toccando una qualsiasi cella verrà mostrato il nuovo view controller:
Come possiamo vedere è apparso un bottone nella parte sinistra del navigation controller che rappresenta il backButton. Quest'ultimo, se toccato, mostrerà nuovamente il ListViewController
con la tabella. La potenza dell'oggetto UINavigationController
è proprio quella di gestire in totale autonomia la visualizzazione dei vari view controllers.