• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#040 – Usiamo le UITableView (parte 2): Modifichiamo le celle e intercettiamone il tocco

By Andrea Busi | on 10 Maggio 2010 | 20 Comments
Senza categoria

Eccoci con il secondo tutorial dedicato alle UITableView. Nella prima parte abbiamo visto come creare una tabella ed inserire dei dati. La nostra tabella, però, non permetteva nessuna interazione con l’utente. Oggi vedremo proprio come aggiungere alcune funzioni indispensabili per un’applicazione che sfrutti le tabelle: vedremo come gestire la selezione di una cella, e implementeremo una “barra” da cui potremo eliminare le celle che non ci interessano più.

1. Modificare la tabella: l’evento edit

La prima cosa da fare è inserire un tasto che ci permetta di accedere alla modifica della tabella. Per fare ciò ci basta “scommentare” una riga che dovreste già trovare nel metodo viewDidLoad (riga 12):

- (void)viewDidLoad {
    [super viewDidLoad];

	self.title = @"Prodotti Apple";

	//elementi da visualizzare nella tabella
	lista = [[NSMutableArray alloc] initWithObjects:@"iPhone", @"iPod",
			 @"iPod Touch", @"iMac", @"iBook", @"MacBook", @"MacBook Pro", @"Mac Pro",
			 @"PowerBook", nil]; 

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

Tutto molto semplice e veloce grazie alle API di Apple.

Se provate ad eseguire l’applicazione noterete che cancellando una riga essa non viene rimossa dalla tabella. Questo succede perchè non abbiamo ancora concluso di implementare questa funzionalità. Inseriamo, quindi, il seguente metodo:

// Elimina l'elemento dalla tabella e dalla lista
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 

	//controlla se l'azione compiuta è un'eliminazione
	if (editingStyle == UITableViewCellEditingStyleDelete) {
		//elimina l'elemento dalla lista
		[lista removeObjectAtIndex:indexPath.row];
		//elimina le'elemento dalla tabella
		[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];

	}
}

Come possiamo notare dalla struttura, anche se un po’ complicata, questo è un metodo del protocollo UITableView, proprio come quello che abbiamo implementato nella prima parte.
Il costrutto if (riga 5) esegue un controllo che, come spiega il commento, controlla se l’azione eseguita sulla tabella è di cancellazione di una riga. Direte voi: “Cosa posso fare d’altro?” Per ora niente, perchè la nostra tabella supporta solo l’eliminazione di una riga, ma volendo si potrebbe implementare anche l’inserimento di una nuova riga oppure altre azioni. È sempre questo metodo che si occupa di gestire tutte le azioni sulla tabella. Ecco spiegata la necessità di questo controllo. Tornando al codice, all’interno dell’if possiamo notare due istruzioni, che eliminano di fatto l’elemento sia dalla lista (riga 7) che dalla tabella (riga 9). In questo modo la cancellazione di una riga è davvero implementata.

2. Rendiamo le celle selezionabili

Vediamo ora di implementare un’altra funzione. Vogliamo che quando l’utente seleziona una cella appaia un pop-up che contenga il nome dell’elemento selezionato. Ovviamente questa azione non ha una grande utilità, ma vi permetterà di imparare come gestire le selezioni dell’utente e vedrete, inoltre, come creare un pop-up.

Prima di implementare il metodo necessario, eliminate dal metodo
“tableView: cellForRowAtIndexPath:” la seguente istruzione (vi ho spiegato nella prima parte a cosa serviva):

cell.selectionStyle = UITableViewCellSelectionStyleNone;

altrimenti le celle non saranno selezionabili.

Sempre nel file “RootViewController.m” inserite ora questo metodo:

// Se selezioniamo una riga appare un pop-up con l'elemento in questione
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
	UIAlertView *popUp = [[UIAlertView alloc] initWithTitle:@"Hai selezionato:"
							message:[lista objectAtIndex:indexPath.row] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
	[popUp show];
	[popUp release];
}

Questo è il metodo che si occupa di eseguire una certa azione quando l’utente seleziona una cella. Alla riga 3 possiamo notare la definizione del pop-up (UIAlertView), che conterrà un messaggio con il nome della cella selezionata. È possibile creare pop-up con diversi bottoni o più messaggi, vi basterà guardare la documentazione per trovare tutte le varianti possibili.
Alla riga 6, infine, viene mostrato il pop-up appena definito.

Clicchiamo su “Build and Go!” e gustiamoci la nostra applicazione con le nuove funzionalità!



Nella prossima parte di questo tutorial vedremo come implementare un box per la ricerca, proprio come avviene nell’applicazione nativa Contatti!


Icona Download Se avete problemi con il tutorial, questo è il nostro file di progetto.

Share this story:
  • tweet

Tags: andrea busimodifica uitableprogrammazione iphonetabelle iphoneTutorial Praticiuitable edituitableview

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • “Tutorial pratici per iOS SDK” si aggiorna alla versione 2.1

    10 Maggio 2012 - 1 Comment
  • 10. Objective-C: UITableView (parte 2)

    23 Gennaio 2012 - 3 Comments
  • 9. Objective-C: UITableView (parte 1)

    20 Dicembre 2011 - 4 Comments

Author Description

23 anni, è studente di Ingegneria Informatica presso l’Università di Bergamo (laurea Magistrale). Appassionato d’informatica sin da bambino, conosce molto bene il C++, Java e l'ObjectiveC, con cui ormai programma con successo da qualche anno. Ha già scritto un ebook “Tutorial pratici per iPhone SDK”, che ha avuto un ottimo successo, e gestisce da quasi due anni BubiDevs, un piccolo blog che ha dato l’ispirazione anche a devAPP.

20 Responses to “T#040 – Usiamo le UITableView (parte 2): Modifichiamo le celle e intercettiamone il tocco”

  1. 11 Maggio 2010

    Fede

    chiaro come sempre!

    è che io arrivo a mettere in pratica e ci divento matto!!!
    ahahhah

  2. 11 Maggio 2010

    Andrea Busi


    Fede:

    chiaro come sempre!

    è che io arrivo a mettere in pratica e ci divento matto!!!
    ahahhah

    ahaha, purtroppo non è sempre facile!! ci vuole molto studio e tanta pazienza! 😉

  3. 11 Maggio 2010

    Usiamo le UITableView: Implementiamo la barra di ricerca | devAPP

    […] Pubblicazioni « T#040 – Usiamo le UITableView (parte 2): Modifichiamo le celle e intercettiamone il tocco […]

  4. 19 Maggio 2010

    Lele

    Belle guide complimenti 🙂
    rispetto a tutti i libri in inglese che si trovano in giro, queste guide sono molto piu’ puntuali e meno dispersive.

  5. 19 Maggio 2010

    Andrea Busi


    Lele:

    Belle guide complimenti :)
    rispetto a tutti i libri in inglese che si trovano in giro, queste guide sono molto piu’ puntuali e meno dispersive.

    grazie mille, è proprio quello che cerchiamo di fare: tutorial non troppo complessi e che diano un qualcosa di pratico e utile 😉

  6. 24 Maggio 2010

    matteo

    Ciao,
    volevo provare a selezionare una cella da codice così che all’apertura mi selezioni direttamente la riga e che compaia l’alert della riga che ho deciso di selezionare da codice..ma non ci riesco proprio..un aiutino please!..:)

    (..e mi associo con i complimenti…guide molto semplici e comprensibili che aiutano ad imparare..grazie!..)

  7. 24 Maggio 2010

    Andrea Busi


    matteo:

    Ciao,
    volevo provare a selezionare una cella da codice così che all’apertura mi selezioni direttamente la riga e che compaia l’alert della riga che ho deciso di selezionare da codice..ma non ci riesco proprio..un aiutino please!..:)

    (..e mi associo con i complimenti…guide molto semplici e comprensibili che aiutano ad imparare..grazie!..)

    grazie dei complimenti..

    scusa però non ho ben capito cosa tu voglia fare..

  8. 25 Maggio 2010

    El Jobso

    Se invece io vorrei far comparire una UIView al posto che una UIAllertView quando schiaccio su un prodotto cosa devo fare? Grazie

  9. 27 Maggio 2010

    Andrea Busi


    El Jobso:

    Se invece io vorrei far comparire una UIView al posto che una UIAllertView quando schiaccio su un prodotto cosa devo fare? Grazie

    prova a guardare questo tutorial, che prossimamente porteremo su devAPP 😉

  10. 28 Maggio 2010

    Riccardo Danzo

    Grazie Andrea! L’avevo gia visto comunque sono riuscito a fare tutto!

  11. 29 Ottobre 2010

    Giovanni

    Ciao, innanzitutto complimenti per il sito e per i tutorial.
    Io avrei una domanda da farti: come faccio a editare una tableview come succede negli iPhone 4 e 3GS?
    Mi spiego meglio: con questo tutorial, quando clicchiamo edit, compare affianco di ogni voce un pallino che selezionato cambia orientamento e compare un tasto per cancellare la voce. Io vorrei poter implementare la modifica delle tabelle come negli iphone 3GSe 4, cioè cliccando sul pulsante modifica, l’elenco si sposta a destra e sotto compare una barra con due pulsanti, modifica e cancella. Grazie mille per l’aiuto

  12. 11 Febbraio 2011

    Piero

    Ciao! complimenti ancora per il tutorial! è molto utile! vorrei sapere una cosa, una volta installata l’app sul mio iphone, quando vado ad eliminare una cella si cancella come dovrebbe, poi chiudo e riapro l’applicazione ma la cella ritorna, non salva, come è possibile salvare quando spingo il tasto home?

  13. 16 Febbraio 2011

    Andrea Busi


    Piero:

    Ciao! complimenti ancora per il tutorial! è molto utile! vorrei sapere una cosa, una volta installata l’app sul mio iphone, quando vado ad eliminare una cella si cancella come dovrebbe, poi chiudo e riapro l’applicazione ma la cella ritorna, non salva, come è possibile salvare quando spingo il tasto home?

    devi fare in modo che i dati che vengono visualizzati nella tua tabella non siano contenuti in una semplice variabile (che ovviamente è sempre “nuova” ad ogni avvio dell’applicazione). I dati dovranno essere salvati in maniera persistente, quindi in un db, in un file o utilizzando NSUserDefault 😉

  14. 4 Maggio 2011

    Andrea

    Ciao a tutti e complimenti per il tutorial, sono davvero davvero utili.

    Stavo cercando di implementare nella mia tabella il codice per eliminare una cella. Questo è il mio codice:

    – (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@”Elemento da togliere %i “,indexPath.row);
    [elementi removeObjectAtIndex:indexPath.row];
    [lista deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }

    Quando lo eseguo mi viene correttamente visualizzato il pulsante rosso allo scorrimento sulla cella, ma se lo clicco l’app va in crash. Come mai?
    NSLog stampa correttamente l’indice ma dopo aver eseguito nslog l’app va in crash
    Elementi è un NSMutableArray.. e funziona correttamente, xcode visualizza correttamente l’autocompletamento per tutte le righe che ho scritto… 🙁

  15. 5 Maggio 2011

    Andrea Busi


    Andrea:

    Ciao a tutti e complimenti per il tutorial, sono davvero davvero utili.

    Stavo cercando di implementare nella mia tabella il codice per eliminare una cella. Questo è il mio codice:

    – (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@”Elemento da togliere %i “,indexPath.row);
    [elementi removeObjectAtIndex:indexPath.row];
    [lista deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }

    Quando lo eseguo mi viene correttamente visualizzato il pulsante rosso allo scorrimento sulla cella, ma se lo clicco l’app va in crash. Come mai?
    NSLog stampa correttamente l’indice ma dopo aver eseguito nslog l’app va in crash
    Elementi è un NSMutableArray.. e funziona correttamente, xcode visualizza correttamente l’autocompletamento per tutte le righe che ho scritto… :(

    è sbagliata la seconda istruzione. Tu hai messo “lista deleteRows…”, invece il metodo va richiamato sulla “tableView” 😉

    [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    
  16. 7 Giugno 2011

    Tavix

    Ciao,e complimenti per lo splendido lavoro che fate….,io pur non avendo dimestichezza con la programmazione, avrei voluto implementare al tocco prolungato su una App, la possibilità oltre alla consueta x per eliminarla, di visualizzare un pop up che contenga una piccola anteprima delle funzioni della App selezionata…avevo in mente di farlo apparire nel pop up di conferma sostituendo il pulsante “annulla” con “informazioni” e al tocco di questo fare apparire il pop up con l’anteprima…non so se sono stato chiaro…e grazie comunque…

  17. 17 Giugno 2011

    Andrea Busi


    Tavix:

    Ciao,e complimenti per lo splendido lavoro che fate….,io pur non avendo dimestichezza con la programmazione, avrei voluto implementare al tocco prolungato su una App, la possibilità oltre alla consueta x per eliminarla, di visualizzare un pop up che contenga una piccola anteprima delle funzioni della App selezionata…avevo in mente di farlo apparire nel pop up di conferma sostituendo il pulsante “annulla” con “informazioni” e al tocco di questo fare apparire il pop up con l’anteprima…non so se sono stato chiaro…e grazie comunque…

    Ciao, a meno di ricorrere al jailbreak quello che vuoi fare tu non è possibile con l’SDK ufficiale di Apple 😉

  18. 7 Luglio 2011

    longilineo

    nel metodo “tableView: cellForRowAtIndexPath” non vi è traccia della riga:
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    Se non sono in editingmode funziona tutto quanto come da te descritto, ma se do una setEditing:YES non riesco a selezionare nessuna riga.

    Perchè?

  19. 22 Luglio 2011

    iStopped

    Anche mettendo [self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; continua a crashare. Cosa può essere?

  20. 6 Aprile 2013

    DevTutorial #10 – Come creare una tabella (Parte II) - Bubi Devs

    […] Leggi il tutorial completo su devAPP […]

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO