• 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#085 – Creare una lista di Preferiti (Parte 1)

By Gianluca Tranchedone | on 17 Febbraio 2011 | 14 Comments
Senza categoria

t085-Creare-una-lista-di-preferiti-xcode-iphone-ipad-00 Ciao a tutti colleghi sviluppatori 🙂 Per il mio primo articolo su devAPP.it ho pensato di scrivere una guida che io stesso qualche tempo fa ho richiesto per questo blog attraverso il Forum, ma che purtroppo, viste le numerose richieste, non è ancora mai stata pubblicata… fino ad ora 🙂 A quel tempo ero alla disperata ricerca di una guida per completare la mia prima applicazione per iPhone, “Japanese Grammar Dictionary: Basic“. Purtroppo, come dicevo, non l’ho trovata: nè qui nè altrove, quindi mi sono dovuto arrangiare da solo. Alla fine, tra documentazione Apple e l’aiuto di uno sviluppatore esperto sono riuscito nel mio intento: creare una tab che mostrasse una tableView con una lista modificabile di preferiti nella mia applicazione iPhone. Spiegare come sono riuscito a far questo e condividerlo con tutti voi è proprio l’obbiettivo dell’articolo che vi accingete a leggere, che vi anticipo subito, sarà diviso in due parti.

Il progetto di partenza

Per semplificare le cose, ho creato un piccolo progetto da cui partiremo: una semplice applicazione formata da due tab, la prima contenente un’UITableView con tre elementi, la seconda contenente l’UITableView in cui mostreremo i nostri elementi preferiti. Vi invito, dunque, a scaricare il progetto “AddToFavorites” prima di proseguire.

All’interno di questo pacchetto troverete il nostro progettino di partenza, con all’interno una cartella chiamata “Favorites Classes” contenente le classi che useremo nel corso di questo tutorial più due immagini, “EmptyStar.png” e “FullStar.png” che useremo per il tasto “Aggiungi/Rimuovi Preferito”.

In questa prima parte dell’articolo vedremo come aggiungere il tasto “Aggiungi/Rimuovi Preferito” all’interno delle detailView di ogni elemento, come salvare l’elemento tra i preferiti senza usare alcun database o plist (e come rimuoverlo dalla stessa lista, ovviamente). Nella seconda parte, invece, andremo a vedere come mostrare gli elementi salvati come preferiti nella tableView precedentemente creata nel secondo tab del progetto e vedremo inoltre come modificare la posizione dei vari elementi o come eliminarli dall’elenco senza accedere alla vista dettaglio corrispondente.

Passiamo a Xcode..

Prima di tutto, apriamo il progetto di partenza “AddToFavorites” in Xcode. Espandiamo quindi i gruppi “Classes” e “Resources” (sarà più comodo lavorare in questo modo). In Classes, creiamo un nuovo gruppo (cliccando con il tasto destro del mouse su “Classes”) e chiamiamolo, ad esempio, “FavoritesClasses” (tutto attaccato).

Nella cartella “Favorites Classes” del pacchetto .zip scaricato, selezioniamo tutti i file e importiamoli nel progetto semplicemente trascinandoli direttamente nel gruppo “FavoritesClasses” che abbiamo appena creato, assicurandoci che l’opzione “Copy file into destination folder (if needed)” sia selezionata. Facciamo lo stesso per le due immagini, facendo attenzione, questa volta, ad importarle nel gruppo “Resources”. Ora abbiamo tutto ciò che ci serve per poter procedere.

A questo punto avrete notato che nel gruppo “Classes” sono presenti tre serie di file .h, .m e .xib chiamate rispettivamente Detail1, Detail2 e Detail3. Questi sono i file delle detailView che si apriranno rispettivamente selezionando le tre celle della tabella principale, che ho preparato per il progetto e che potrete vedere immediatamente se cliccate su “Build & Run” in Xcode.

In questa prima parte del tutorial lavoreremo fondamentalmente su queste tre serie di file, o meglio, mostreremo il lavoro solo su uno di questi tre (Detail1) basterà poi ripetere il processo analogamente per le altre due.

Come salviamo i preferiti?

Come funziona il processo di salvataggio che stiamo per utilizzare? Fondamentalmente sfrutteremo delle tag preimpostate dove verranno temporaneamente salvati rispettivamente titolo e sottotitolo, che mostreremo in una riga della tableView con gli elementi preferiti (normalmente vorremo mostrare lo stesso titolo e sottotitolo che corrisponde allo stesso elemento nella tableView principale). A questo punto le salveremo in due array. Se le tag assegnate a un elemento sono presenti nei due array, allora l’elemento sarà considerato “preferito”.

Un po’ di codice

Prima di procedere, diamo uno sguardo ai files che abbiamo importato all’inizio. Iniziamo da “SyntetizeSingleton.h”. Di questo file non parlerò molto, per maggiori informazioni vi rimando a un’ottimo articolo che trovate sul blog Cocoa with Love. Per ora vi basti sapere che questo è uno dei files che si occupa di far in modo che la nostra lista di preferiti sia accessibile da qualsiasi classe. In Favorite.h e Favorite.m, invece, abbiamo semplicemente dichiarato due stringe, “favId” e “description”, le nostre tag. In FavoritesData.h e FavoritesData.m abbiamo inoltre definito i metodi che ci consentiranno di aggiungere o rimuovere un elmento ai preferiti.

Andiamo quindi a modificare il file Detail1.m (non abbiamo necessità di toccare il suo header .h). La prima cosa che vorremo fare, sarà quella di creare un tasto che si aggiorni a seconda che l’elemento sia già un preferito o meno, mostrando come immagine una stellina gialla quando l’elemento è già preferito o una stellina bianca quando invece non lo è.

Per una questione sia estetica che pratica, per far ciò ho usato un “UISegmentedControl” con un solo elemento che può essere ampliato a più elementi facendo posto a più bottoni nello stesso lato di una navbar. Copiate e incollate il seguente codice, facendo attenzione a rimuovere le precenti dichiarazioni di alcune righe:

// importiamo i file Favorite and FavoritesData
#import "Favorite.h"
#import "FavoritesData.h"

// definiamo il titolo e sottotitolo che vorremo mostrare nella tableView Preferiti
#define FAV_ID @"Titolo Riga 1"
#define FAV_DESC @"Sottotitolo Riga 1"

// creiamo un tasto che si aggiorna a seconda che un elemento sia preferito o meno
// questa implementazione ci serve per aggiornare lo stato del tasto
@interface Detail1 (Private)

- (void) rebuildButton;

@end

@implementation Detail1

- (void) rebuildButton {
	
	self.navigationItem.rightBarButtonItem = nil;
	
	BOOL isFav = [[FavoritesData sharedFavoritesData] favoriteWithId:FAV_ID] != nil;
	NSString *starImage = isFav ? @"FullStar.png" : @"EmptyStar.png";
	
    // Creiamo un SegmentedControl e lo aggiungiamo come rightBarButtonItem
	UISegmentedControl *segmentedControl = [[UISegmentedControl alloc] initWithItems:
											[NSArray arrayWithObjects:
											 [UIImage imageNamed:starImage],
											 nil]];
	
	[segmentedControl addTarget:self action:@selector(makeFavorite:) forControlEvents:UIControlEventValueChanged];
	segmentedControl.frame = CGRectMake(0, 0, 35, 30);
	segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;
	segmentedControl.momentary = YES;
	
	UIBarButtonItem *segmentBarItem = [[UIBarButtonItem alloc] initWithCustomView:segmentedControl];
	[segmentedControl release];
	
	self.navigationItem.rightBarButtonItem = segmentBarItem;
	[segmentBarItem release];
    
}

// l'azione che dev'essere eseguita quando il tasto viene premuto.
- (void) makeFavorite:(id)sender
{
    Favorite *favorite = [[FavoritesData sharedFavoritesData] favoriteWithId:FAV_ID];
    
    if(!favorite) {
        
        Favorite *fav = [[Favorite alloc] init];
        fav.favId = FAV_ID;
        fav.description = FAV_DESC;
        [[FavoritesData sharedFavoritesData] addFavorite:fav];
        [fav release];
        
    }
    else {
        [[FavoritesData sharedFavoritesData] removeFavoriteById:FAV_ID];
    }
}

- (void) _refreshFav{
	[self rebuildButton];
}

// in dealloc
[[NSNotificationCenter defaultCenter] removeObserver:self];

// in viewDidLoad
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_refreshFav) name:REFRESH_FAVORITES object:nil];
    
    [self rebuildButton];

Dai commenti nel codice dovreste capire come funziona il tutto. Non ci resta che ripetere il processo per i restanti file Detail2.m e Detail3.m cambiando in maniera opportuna le istruzioni #define, @interface e @implementation. Ora, se proviamo a cliccare su “Build & Run” in Xcode e avviamo l’applicazione nell’iPhone Simulator, vedremo che è presente il tasto “Aggiungi/Rimuovi Preferito” e cliccandoci sopra l’immagine della stellina cambia (da bianco a giallo e viceversa).

Per ora è tutto. Vi ricordo che nella seconda parte, vedremo come mostrare gli elementi salvati come preferiti nella tableView precedentemente creata nella seconda tab del progetto e come modificare la posizione degli elementi o ancora eliminare quelli che non vogliamo più visualizzare nel nostro elenco senza accedere alle relative viste dettaglio.

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


t085-Creare-una-lista-di-preferiti-xcode-iphone-ipad-01

Share this story:
  • tweet

Tags: gestione preferiti xcodeprogrammazione iphonetabbarTutorial Praticitutorial Xcodeuitable

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

  • Xcode 4: Distribuzione Ad Hoc delle applicazioni iPhone e iPad

    10 Gennaio 2012 - 20 Comments
  • Tutorial pratici per iOS SDK: disponibile la versione 2.0 aggiornata a iOS 5 e XCode 4.2

    16 Novembre 2011 - 6 Comments
  • T#101 – Integrare AirPrint per stampare dalle applicazioni iPhone e iPad

    13 Settembre 2011 - 10 Comments

Author Description

Gianluca lavora come iOS Developer presso una nota azienda Nederlandese. Nonostante si sia laureato in Lingue Culture Comparate (Giapponese e Anglo-Americana) presso l'Università degli Studi di Napoli “L'Orientale”, la passione per la programmazione risale all'età della fanciullezza in cui aveva imparato i rudimenti del C++. L'interesse per questa materia è però andato oltre questa base solo dalla fine del 2009, quando si è avvicinato alla programmazione per iPhone. A Settembre 2010 ha comprato il suo primo Mac (finalmente) e ha iniziato a programmare la sua prima app per iPhone, “Japanese Grammar Dictionary: Basic”, disponibile da metà Gennaio 2011 su App Store. Nel Luglio dello stesso anno, la sua seconda applicazione, “Chi Paga da Bere?”, è stata pubblicata sull'App Store.

14 Responses to “T#085 – Creare una lista di Preferiti (Parte 1)”

  1. 17 Febbraio 2011

    Tweets that mention Creare una lista di Preferiti nelle nostre applicazioni iPhone | devAPP -- Topsy.com

    […] This post was mentioned on Twitter by devAPP, Vanni Giannozzi. Vanni Giannozzi said: T#085 – Creare una lista di Preferiti (Parte 1): Ciao a tutti colleghi sviluppatori Per il mio primo articolo su… http://bit.ly/eS1UtI […]

  2. 17 Febbraio 2011

    Norby

    Favolosi come al solito! Senza di voi siamo persi 😀 Ragazzi, quando avete tempo potete fare un tutorial per aggiungere alle nostre app il tasto “add”? Anche io l’ho chiesto sul forum ma niente 🙁

  3. 17 Febbraio 2011

    Gianluca T.

    Grazie :). Il tasto “add” cosa dovrebbe fare? Aggiungere elementi a una tableView o altro?

  4. 17 Febbraio 2011

    norby

    esatto! Aggiungere un elemento ad una tableView… Penso sia abbastanza semplice per chi conosce bene l’OBJ-C

  5. 17 Febbraio 2011

    Gianluca T.

    Allora vedrò di lavorarci su dopo la pubblicazione della seconda parte di questo tutorial… magari partendo proprio da questo 😉

  6. 17 Febbraio 2011

    norby

    Grazie mille!! 🙂

  7. 19 Febbraio 2011

    Alberto

    Buongiorno, siete veramente fantastici.

    Ho però un favore da chiedervi, potete dirmi cosa non va in questo progetto?

    Grazie, ho provato a chiedere anche sul forum ma niente….

  8. 19 Febbraio 2011

    Alberto

    https://dl-web.dropbox.com/get/Bum.zip?w=9beba7a6

  9. 19 Febbraio 2011

    Gianluca T.

    Il link che hai dato non funziona… ma il progetto usa il tutorial mostrato in quest’articolo?

  10. 21 Febbraio 2011

    ZioFonz

    Molto interessante il tutorial!
    Io ho creato una cosa analoga in una mia applicazione ma con l’utilizzo di un campo supplementare per ogni record del database, aspetto la conclusione con curiosità, anche se penso di aver capito come “andrà a finire”.
    Volevo chiederti se effettivamente migliora le prestazioni dell’applicazione utilizzare quanto da te descritto. Grazie e complimenti!

  11. 21 Febbraio 2011

    Gianluca T.

    Fondamentalmente dipende dal tipo di applicazione. Se il massimo di elementi salvabili non è accessivo, si, credo convenga anche a livello di prestazioni. Per quantità di elementi elevate è sicuramente più conveniente usare una plist o un database.

    La seconda parte del tutorial arriverà tra stasera e domani 😉

  12. 22 Febbraio 2011

    Creare una lista di Preferiti nelle applicazioni iPhone e iPad | devAPP

    […] con la seconda parte del nostro tutorial. Se non avete ancora letto la prima parte su come creare una lista di preferiti, vi consiglio di farlo ora. Come promesso, in […]

  13. 23 Gennaio 2012

    Sergio

    Ottimo tutorial,
    ma un chiarimento: usando il simulatore non mi mantiene i favorites e non capisco se è normale perchè è il simulatore o se c’è un altro problema.
    Ad esempio come faccio a vedere il file salvato? dove lo trovo?
    Grazie

  14. 23 Aprile 2012

    salvo

    Grazie tante, ottimo tutorial

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