Stefano Zanetti sect The Alchemist
Just do itApriamo Xcode e compiliamo
iOS Bootcamp
Stefano Zanetti
Apple iOS DeveloperSuperpartes Innovation Campus amp H-Farm
Co-founder di Pragma Mark ― wwwpragmamarkorg
[tt] stefanozanetti_[in] Stefano Zanetti[fb] stefanoznt [email] zanettistefanogmailcom
iOS Bootcamp
Di cosa parliamo oggi
bull MVC - Design Pattern Modal View Controller
bull Xcode introduzione alle funzioni base
bull Sviluppiamo la nostra prima App
bull mainm
bull AppDelegate
bull UIViewController
bull UINavigationController
bull UITableViewController
iOS Bootcamp
MVC
Il design pattern MVC assegna ad ogni oggetto un ruolo preciso Model View o Controller
Controller
Model View
Coordinator
Data Display
Aggiorna
Notifica Aggiorna
Input utente
iOS Bootcamp
Model
Definisce la logica con cui vengono manipolati questi dati es salvataggio modifica eliminazione
Descrive ili modelloi dei dati utilizzatoi dalla nostraapplicazione
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Stefano Zanetti
Apple iOS DeveloperSuperpartes Innovation Campus amp H-Farm
Co-founder di Pragma Mark ― wwwpragmamarkorg
[tt] stefanozanetti_[in] Stefano Zanetti[fb] stefanoznt [email] zanettistefanogmailcom
iOS Bootcamp
Di cosa parliamo oggi
bull MVC - Design Pattern Modal View Controller
bull Xcode introduzione alle funzioni base
bull Sviluppiamo la nostra prima App
bull mainm
bull AppDelegate
bull UIViewController
bull UINavigationController
bull UITableViewController
iOS Bootcamp
MVC
Il design pattern MVC assegna ad ogni oggetto un ruolo preciso Model View o Controller
Controller
Model View
Coordinator
Data Display
Aggiorna
Notifica Aggiorna
Input utente
iOS Bootcamp
Model
Definisce la logica con cui vengono manipolati questi dati es salvataggio modifica eliminazione
Descrive ili modelloi dei dati utilizzatoi dalla nostraapplicazione
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Di cosa parliamo oggi
bull MVC - Design Pattern Modal View Controller
bull Xcode introduzione alle funzioni base
bull Sviluppiamo la nostra prima App
bull mainm
bull AppDelegate
bull UIViewController
bull UINavigationController
bull UITableViewController
iOS Bootcamp
MVC
Il design pattern MVC assegna ad ogni oggetto un ruolo preciso Model View o Controller
Controller
Model View
Coordinator
Data Display
Aggiorna
Notifica Aggiorna
Input utente
iOS Bootcamp
Model
Definisce la logica con cui vengono manipolati questi dati es salvataggio modifica eliminazione
Descrive ili modelloi dei dati utilizzatoi dalla nostraapplicazione
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
MVC
Il design pattern MVC assegna ad ogni oggetto un ruolo preciso Model View o Controller
Controller
Model View
Coordinator
Data Display
Aggiorna
Notifica Aggiorna
Input utente
iOS Bootcamp
Model
Definisce la logica con cui vengono manipolati questi dati es salvataggio modifica eliminazione
Descrive ili modelloi dei dati utilizzatoi dalla nostraapplicazione
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Model
Definisce la logica con cui vengono manipolati questi dati es salvataggio modifica eliminazione
Descrive ili modelloi dei dati utilizzatoi dalla nostraapplicazione
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
View
Ersquo ciograve che lrsquoutente vede
bull Sa come disegnarsibull Risponde alle azioni dellrsquoutente
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Controller
Ersquo lrsquointermediario tra una o piugrave View e uno o piugrave Model
bull Interpreta le azioni dellrsquoutente eseguite nella View e comunica al Model eventuali cambiamenti da apportare
bull Segnala alla View le variazioni ai dati compiute dal Model
bull Gestisce il ciclo di vita degli altri oggetti
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Best practice
1 Utilizziamo lrsquoMVC 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
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Xcode
Inspector
NavigatorLibrary
Console
EditorBuilder
Jump Bar
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Navigator
bull Project Navigator (cmd + 1)
bull Symbol Navigator (cmd + 2)
bull Search Navigator (cmd + 3)
bull Issue Navigator (cmd + 4)
bull Debug Navigator (cmd + 5)
bull Breakpoints Navigator (cmd + 6)
bull Log Navigator (cmd + 7)
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Inspector
bull File Inspector (alt + cmd + 1)
bull Quick Help Inspector (alt + cmd + 2)
bull Identity Inspector (alt + cmd + 3)
bull Attributes Inspector (alt + cmd + 4)
bull Size Inspector (alt + cmd + 5)
bull Connections Inspector (alt + cmd + 6)
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Library
bull File Template Library (ctrl + alt + cmd + 1)
bull Code Snipped Library (ctrl + alt + cmd + 2)
bull Object Library (ctrl + alt + cmd + 3)
bull Media Library (ctrl + alt + cmd + 4)
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Jump Bar
bull Mostra il percorso relativo del file corrente
bull Ci permette di navigare velocemente tra i file che si trovano allo stesso livello
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
IBOutlet
bull Rappresenta una variabile drsquoistanza che referenzia un altro oggetto
bull Questa referenza egrave configurata ed archiviata attraverso lrsquoInterface Builder
bull Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra lrsquooggetto utilizzato nello xib e la variabile drsquoistanza ad esso collegata
property (nonatomic retain) IBOutlet UILabel label
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
IBActions
bull Utilizzato al posto di void
bull Dichiara che il metodo egrave una ldquoActionrdquo In questo modo IB come per gli IBOutlet egrave consapevole della sua presenza e puograve collegarlo ad un evento
bull Il parametro sender egrave controllo che manda il messaggio
- (IBAction)doSomething(id)sender
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Connettiamo
ctrl + click sul controllo + drag
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
Stefano Zanetti sect The Alchemist
La prima Appdalla teoria alla pratica
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Il punto di ingresso mainm
import ltUIKitUIKithgtimport AppDelegateh
int main(int argc char argv[]) autoreleasepool return UIApplicationMain(argc argv nil NSStringFromClass([AppDelegate class]))
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
AppDelegate Start amp End
- (BOOL)application(UIApplication )application didFinishLaunchingWithOptions(NSDictionary )launchOptions Il sistema notifica alla nostra applicazione che la fase di caricamento egrave terminata
- (void)applicationWillTerminate(UIApplication )application Il sistema notifica alla nostra applicazione che lutente o il sistema stesso ha richiesto la chiusura della nostra applicazione Possiamo usare questo metodo per salvare lo status della nostra applicazione
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
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
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Enter in Foreground
- (void)applicationWillEnterForeground(UIApplication )application Il sistema notifica che lrsquoapplicazione sta passando dallo stato di background a quello di inattiva In questo metodo egrave possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background- (void)applicationDidBecomeActive(UIApplication )application Il sistema notifica che lrsquoapplicazione egrave tornata attiva Utilizzare questo metodo per far ripartire i vari task attivi timers eventualmente per effettuare un refresh dellrsquointerfaccia utente
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UIViewController
bull Un UIViewController egrave controller generico utile per manipolare le UIView
bull Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Di cosa abbiamo bisogno
bull - (id)initWithNibName(NSString )nibNameOrNil bundle(NSBundle )nibBundleOrNil
bull - (void)presentModalViewController(UIViewController )modalViewController animated(BOOL)animated
bull - (void)dismissModalViewControllerAnimated(BOOL)animated
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Creare un ViewController
PMViewController controller = [[[PMViewController alloc] initWithNibNamePMViewController bundlenil] autorelease]
Nome del file xibBundle in cui
cercare il file xib
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Quale transizione utilizzare
UIModalTransitionStyle UIModalTransitionStyleCoverVertical UIModalTransitionStyleFlipHorizontal UIModalTransitionStyleCrossDissolve UIModalTransitionStylePartialCurl [controller setModalTransitionStyleUIModalTransitionStyleCoverVertical]
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Utilizziamo il ViewController
[self presentModalViewControllercontroller animatedYES]
Presentiamo in modale il ViewController
[self dismissModalViewControllerAnimatedYES]
Rimuoviamo il ViewController
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
AppearDisappear
bull - (void)viewWillAppear(BOOL)animated
bull - (void)viewDidAppear(BOOL)animated
bull - (void)viewWillDisappear(BOOL)animated
bull - (void)viewDidDisappear(BOOL)animated
bull - (void)viewDidLoad
bull - (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
Gestione visualizzazione view
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Memory Warning
- (void)didReceiveMemoryWarning
- (void)viewWillUnload- (void)viewDidLoad
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UINavigationController
Estende la classe UIViewController implementando la navigazione semplice e veloce tra ViewControllers
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Push amp Pop
bull - (id)initWithRootViewController(UIViewController )rootViewController
bull - (void)pushViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToViewController(UIViewController )viewController animated(BOOL)animated
bull - (NSArray )popToRootViewControllerAnimated(BOOL)animated
Navigazione tra ViewControllers
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
RootViewController
UIViewController viewController = [[UIViewController alloc] initWithNibNameViewController bundlenil]
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewControllerviewController]
[viewController release]
Inizializzazione UINavigationController
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Push
UIViewController detailViewController = [[UIViewController alloc] initWithNibNamedetailViewController bundlenil]
[selfnavigationController pushViewControllerdetailViewController animatedYES]
[detailViewController release]
Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Pop
[selfnavigationController popViewControllerAnimatedYES]
Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente
[selfnavigationController popToRootViewControllerAnimatedYES]
Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UITableView
Ecco qualche esempio di TableView
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UITableView
bull un UIViewController
bull una UITableView
bull implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle)
Cosa ci serve
bull un UITableViewController
Oppure
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UITableViewDataSource
bull Obbligatori
bull - (NSInteger)tableView(UITableView ) UITableView numberOfRowsInSection(NSInteger)section
bull - (UITableViewCell )tableView(UITableView ) UITableView cellForRowAtIndexPath(NSIndexPath )indexPath
bull Opzionali
bull - (NSInteger)numberOfSectionsInTableView(UITableView )tableView
bull - (NSString )tableView(UITableView )tableView titleForHeaderInSection(NSInteger)section
bull
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Definiamo il modello dati
Data Model
import ltUIKitUIKithgt
interface PMFATableViewController UIViewControllerltUITableViewDataSource UITableViewDelegategt
UITableView _tableView NSArray _elementsproperty (nonatomic retain) IBOutlet UITableView tableViewproperty (nonatomic retain) NSArray elements
end
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Popoliamo lrsquoarray di oggetti
- (void)viewDidLoad
[super viewDidLoad] NSArray elements = [NSArray arrayWithObjectsObjective-C UIViewController UITabBarController UINavigationController UITableView nil] selfelements = elements
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Configuriamo il DataSource
- (NSInteger)tableView(UITableView )tableView numberOfRowsInSection(NSInteger)section return [_elements count]
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Configuriamo il DataSource
- (UITableViewCell )tableView(UITableView )tableView cellForRowAtIndexPath(NSIndexPath )indexPathstatic NSString cellIdentifier = Cell UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
return cell
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Cell Identifier
static NSString cellIdentifier = Cell
Descriviamo le singole righe della slide precedente
CellIdentifier viene definito statico perchegrave questo metodo viene richiamato moltissime volte La parola chiave ldquostaticrdquo permette di non ricreare un oggetto se ne esiste giagrave uno di quel tipo
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Riutilizzare le celle
UITableViewCell cell = [tableView dequeueReusableCellWithIdentifiercellIdentifier]
Il DataSource riutilizza gli oggetti UITableViewCell Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UITableView
if (cell == nil) cell = [[[UITableViewCell alloc] initWithStyleUITableViewCellStyleDefault reuseIdentifiercellIdentifier] autorelease]
celltextLabeltext = [_elements objectAtIndexindexPathrow]
Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova
Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dellrsquoNSIndexPath interessato
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
UITableViewDelegate
bull - (void)tableView(UITableView )tableView willDisplayCell(UITableViewCell )cell forRowAtIndexPath(NSIndexPath )indexPath
bull - (CGFloat)tableView(UITableView )tableView heightForRowAtIndexPath(NSIndexPath )indexPath
bull - (UIView )tableView(UITableView )tableView viewForHeaderInSection(NSInteger)section
bull - (UIView )tableView(UITableView )tableView viewForFooterInSection(NSInteger)section
bull - (void)tableView(UITableView )tableView didSelectRowAtIndexPath(NSIndexPath )indexPath
bull
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Whatrsquos NeXT Lo
cal a
nd P
ush
Not
ifica
tion
In-A
pp P
urch
ase
Data Management Coredata
iCloud integration
Using Storyboard
Advanced UITableView and custom
UITableViewCell
iOS Bootcamp
Thanks
pragmamarkorg
iOS Bootcamp
Thanks
pragmamarkorg