Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 26 di 32
  • livello intermedio
Indice lezioni

Gestire la navigazione delle celle di una tabella

Mostriamo il dettaglio dell'oggetto Fruit con un navigation controller (UINavigationController) e gestiamo il tocco su una cella della tabella
Mostriamo il dettaglio dell'oggetto Fruit con un navigation controller (UINavigationController) e gestiamo il tocco su una cella della tabella
Link copiato negli appunti

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 listViewControllerall'array controllers come segue:

[controllers addObject:listNav];

Adesso, effettuando un Run del progetto, vedremo la schermata relativa all'oggetto ListViewController come nel seguente screenshot:

List View Controller Con Navigation

Schermata relativa al ListViewController con il navigation controller

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:

Navigation Controller Back Button

Schermata relativa al FruitDetailViewController

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.

Ti consigliamo anche