3. Di cosa parliamo oggi?
• MVC - Design Pattern Modal View Controller
• Xcode: introduzione alle funzioni base
• Sviluppiamo la nostra prima App:
• main.m
• AppDelegate
• UIViewController
• UINavigationController
• UITableViewController
iOS Bootcamp
4. MVC
Coordinator
Aggiorna Input utente
Controller
Model View
Notifica Aggiorna
Data Display
Il design pattern MVC assegna ad ogni oggetto un ruolo
preciso: Model,View o Controller
iOS Bootcamp
5. Model
Descrive il/i modello/i dei dati utilizzato/i dalla nostra
applicazione
Definisce la logica con cui vengono manipolati questi
dati. es: salvataggio, modifica, eliminazione...
iOS Bootcamp
6. View
E’ ciò che l’utente vede
• Sa come disegnarsi
• Risponde alle azioni dell’utente
iOS Bootcamp
7. Controller
E’ l’intermediario tra una o più View e uno o più Model
• Interpreta le azioni dell’utente eseguite nella View
e comunica al Model eventuali cambiamenti da
apportare
• Segnala alla View le variazioni ai dati compiute dal
Model
• Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
8. Best practice
1. Utilizziamo l’MVC per dividere il lavoro
2. Impariamo a conoscere il Framework, non
reinventiamolo.
3. Non abusiamo delle View
4. Minimiziamo le dipendenze mutuali
5. Dividiamo il codice in moduli
iOS Bootcamp
12. Library
• File Template Library (ctrl + alt + cmd + 1)
• Code Snipped Library (ctrl + alt + cmd + 2)
• Object Library (ctrl + alt + cmd + 3)
• Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
13. Jump Bar
• Mostra il percorso relativo del file corrente
• Ci permette di navigare velocemente tra i file che
si trovano allo stesso livello
iOS Bootcamp
14. IBOutlet
@property (nonatomic, retain) IBOutlet UILabel *label;
• Rappresenta una variabile d’istanza che referenzia
un altro oggetto
• Questa referenza è configurata ed archiviata
attraverso l’Interface Builder
• Ogni volta che accediamo ad uno xib viene
ristabilita la connessione tra l’oggetto utilizzato
nello xib e la variabile d’istanza ad esso collegata
iOS Bootcamp
16. IBActions
- (IBAction)doSomething:(id)sender;
• Utilizzato al posto di void
• Dichiara che il metodo è una “Action”. In questo
modo IB, come per gli IBOutlet, è consapevole
della sua presenza e può collegarlo ad un evento
• Il parametro sender è controllo che manda il
messaggio
iOS Bootcamp
18. La prima App...
dalla teoria alla pratica
Stefano Zanetti § The Alchemist
19. Il punto di ingresso: main.m
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
}
}
iOS Bootcamp
20. AppDelegate Start & End
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Il sistema notifica alla nostra applicazione che la fase di
caricamento è terminata
}
- (void)applicationWillTerminate:(UIApplication *)application
{
! Il sistema notifica alla nostra applicazione che l'utente o
//
il sistema stesso ha richiesto la chiusura della nostra
applicazione. Possiamo usare questo metodo per salvare lo
status della nostra applicazione.
}
iOS Bootcamp
21. Enter in Background
- (void)applicationWillResignActive:(UIApplication
*)application
{
// Il sistema notifica alla nostra applicazione che sta per
diventare inattiva. Disabilitare Timer, mettere in pausa i
Task, ...
}
- (void)applicationDidEnterBackground:(UIApplication
*)application
{
// Se la nostra applicazione supporta il background, questo
metodo viene chiamato al posto del applicationWillTerminate.
Utilizzate questo metodo per rilasciare le risorse, salvare i
dati, invalidare i timers...
}
iOS Bootcamp
22. Enter in Foreground
- (void)applicationWillEnterForeground:(UIApplication
*)application
{
! Il sistema notifica che l’applicazione sta passando dallo
//
stato di background a quello di inattiva. In questo metodo è
possibile ripristinare la maggior parte delle cambiamenti
effettuati prima di entrare in background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
! Il sistema notifica che l’applicazione è tornata attiva.
//
Utilizzare questo metodo per far ripartire i vari task attivi,
timers, eventualmente per effettuare un refresh
dell’interfaccia utente...
}
iOS Bootcamp
23. UIViewController
• Un UIViewController è controller generico utile
per manipolare le UIView.
• Mette a disposizione diversi metodi che sono
chiamati quando una vista appare o scompare.
iOS Bootcamp
25. Creare un ViewController
PMViewController *controller = [[[PMViewController alloc]
initWithNibName:@"PMViewController" bundle:nil] autorelease];
Bundle in cui
Nome del file xib
cercare il file xib
iOS Bootcamp
27. Utilizziamo il ViewController
Presentiamo in modale il ViewController
[self presentModalViewController:controller animated:YES];
Rimuoviamo il ViewController
[self dismissModalViewControllerAnimated:YES];
iOS Bootcamp
33. Push
Creiamo e aggiungiamo un nuovo contenuto allo stack
dei ViewControllers
UIViewController *detailViewController = [[UIViewController
alloc] initWithNibName:@"detailViewController" bundle:nil];
[self.navigationController
pushViewController:detailViewController animated:YES];
[detailViewController release];
iOS Bootcamp
34. Pop
Rimuoviamo il ViewController corrente dallo stack e
torniamo a quello precedente
[self.navigationController popViewControllerAnimated:YES];
Rimuoviamo tutti i ViewControllers dallo stack e
torniamo al rootViewController
[self.navigationController popToRootViewControllerAnimated:YES];
iOS Bootcamp
36. UITableView
Cosa ci serve?
• un UITableViewController
Oppure:
• un UIViewController
• una UITableView
• implementare correttamente
UITableViewDataSource (rappresentazione dei
dati) e il UITableViewDelegate (visualizzazione
contenuto celle)
iOS Bootcamp
42. Cell Identifier
Descriviamo le singole righe della slide precedente:
CellIdentifier viene definito statico perchè questo metodo viene
richiamato moltissime volte. La parola chiave “static” permette
di non ricreare un oggetto se ne esiste già uno di quel tipo.
static NSString *cellIdentifier = @"Cell";
iOS Bootcamp
43. Riutilizzare le celle
Il DataSource riutilizza gli oggetti UITableViewCell. Tramite
questo metodo chiediamo alla UITableView se esiste una cella
con quel particolare identifier che possiamo riutilizzare
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:cellIdentifier];
iOS Bootcamp
44. UITableView
Nel caso non esista nessuna cella riutilizzabile ne creiamo una
nuova
if (cell == nil)
{
cell = [[[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:cellIdentifier] autorelease];
}
Aggiorniamo il testo della cella con la riga del nostro array
corrispondente alla riga dell’NSIndexPath interessato
cell.textLabel.text = [_elements objectAtIndex:indexPath.row];
iOS Bootcamp
46. What’s NeXT !?
Using Storyboard iCl
cat Push
ou
d
ion
int
egr
No and
atio
n
tifi
cal
Lo
e
has
Ma Dat
urc
nag a
pP
Co em
red ent
Ap
ata : Advanced UITableView
In-
and custom
UITableViewCell
iOS Bootcamp