xcode - just do it

47
Stefano Zanetti § The Alchemist Just do it Apriamo Xcode e compiliamo...

Upload: pragmamark

Post on 22-Apr-2015

1.303 views

Category:

Technology


2 download

DESCRIPTION

Apriamo Xcode e compiliamo!

TRANSCRIPT

Page 1: Xcode - Just do it

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

Page 2: Xcode - Just do it

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

Page 3: Xcode - Just do it

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

Page 4: Xcode - Just do it

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

Page 5: Xcode - Just do it

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

Page 6: Xcode - Just do it

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

Page 7: Xcode - Just do it

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

Page 8: Xcode - Just do it

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

Page 9: Xcode - Just do it

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

Page 10: Xcode - Just do it

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

Page 11: Xcode - Just do it

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

Page 12: Xcode - Just do it

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

Page 13: Xcode - Just do it

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

Page 14: Xcode - Just do it

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

Page 15: Xcode - Just do it

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

Page 16: Xcode - Just do it

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

Page 17: Xcode - Just do it

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

Page 18: Xcode - Just do it

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

Page 19: Xcode - Just do it

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

Page 20: Xcode - Just do it

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

Page 21: Xcode - Just do it

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

Page 22: Xcode - Just do it

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

Page 23: Xcode - Just do it

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

Page 24: Xcode - Just do it

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

Page 25: Xcode - Just do it

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

Page 26: Xcode - Just do it

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

Page 27: Xcode - Just do it

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

Page 28: Xcode - Just do it

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

Page 29: Xcode - Just do it

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

Page 30: Xcode - Just do it

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

Page 31: Xcode - Just do it

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

Page 32: Xcode - Just do it

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

Page 33: Xcode - Just do it

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

Page 34: Xcode - Just do it

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

Page 35: Xcode - Just do it

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

Page 36: Xcode - Just do it

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

Page 37: Xcode - Just do it

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

Page 38: Xcode - Just do it

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

Page 39: Xcode - Just do it

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

Page 40: Xcode - Just do it

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

Page 41: Xcode - Just do it

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

Page 42: Xcode - Just do it

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

Page 43: Xcode - Just do it

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

Page 44: Xcode - Just do it

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

Page 45: Xcode - Just do it

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

Page 46: Xcode - Just do it

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

Page 47: Xcode - Just do it

iOS Bootcamp

Thanks

pragmamarkorg