SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Just do it
Apriamo Xcode e compiliamo...




    Stefano Zanetti § The Alchemist
Stefano Zanetti
   Apple iOS Developer
    Superpartes Innovation Campus & H-Farm

   Co-founder di
    # Pragma Mark ― www.pragmamark.org

   [tt] @stefanozanetti_
    [in] Stefano Zanetti
    [fb] stefano.znt
    [email] zanetti.stefano@gmail.com



                                             iOS Bootcamp
Di cosa parliamo oggi?

• MVC - Design Pattern Modal View Controller
• Xcode: introduzione alle funzioni base
• Sviluppiamo la nostra prima App:
 •   main.m

 •   AppDelegate

 •   UIViewController

 •   UINavigationController

 •   UITableViewController



                                           iOS Bootcamp
MVC
                    Coordinator
      Aggiorna                        Input utente
                      Controller



       Model                             View
                   Notifica Aggiorna
        Data                            Display

Il design pattern MVC assegna ad ogni oggetto un ruolo
            preciso: Model,View o Controller

                                                  iOS Bootcamp
Model

Descrive il/i modello/i dei dati utilizzato/i dalla nostra
applicazione



Definisce la logica con cui vengono manipolati questi
dati. es: salvataggio, modifica, eliminazione...



                                                    iOS Bootcamp
View

E’ ciò che l’utente vede


• Sa come disegnarsi
• Risponde alle azioni dell’utente



                                     iOS Bootcamp
Controller

E’ l’intermediario tra una o più View e uno o più Model


• Interpreta le azioni dell’utente eseguite nella View
    e comunica al Model eventuali cambiamenti da
    apportare
•   Segnala alla View le variazioni ai dati compiute dal
    Model
•   Gestisce il ciclo di vita degli altri oggetti


                                                   iOS Bootcamp
Best practice

1. Utilizziamo l’MVC per dividere il lavoro
2. Impariamo a conoscere il Framework, non
   reinventiamolo.
3. Non abusiamo delle View
4. Minimiziamo le dipendenze mutuali
5. Dividiamo il codice in moduli


                                              iOS Bootcamp
Xcode
                     Jump Bar
                                Inspector



            Editor/Builder


Navigator
                                 Library
                 Console
                                   iOS Bootcamp
Navigator
• Project Navigator (cmd + 1)
• Symbol Navigator (cmd + 2)
• Search Navigator (cmd + 3)
• Issue Navigator (cmd + 4)
• Debug Navigator (cmd + 5)
• Breakpoints Navigator (cmd + 6)
• Log Navigator (cmd + 7)
                                    iOS Bootcamp
Inspector

• File Inspector (alt + cmd + 1)
• Quick Help Inspector (alt + cmd + 2)
• Identity Inspector (alt + cmd + 3)
• Attributes Inspector (alt + cmd + 4)
• Size Inspector (alt + cmd + 5)
• Connections Inspector (alt + cmd + 6)
                                          iOS Bootcamp
Library


• File Template Library (ctrl + alt + cmd + 1)
• Code Snipped Library (ctrl + alt + cmd + 2)
• Object Library (ctrl + alt + cmd + 3)
• Media Library (ctrl + alt + cmd + 4)

                                                 iOS Bootcamp
Jump Bar



• Mostra il percorso relativo del file corrente
• Ci permette di navigare velocemente tra i file che
  si trovano allo stesso livello




                                              iOS Bootcamp
IBOutlet
@property (nonatomic, retain) IBOutlet UILabel *label;




• Rappresenta una variabile d’istanza che referenzia
   un altro oggetto
• Questa referenza è configurata ed archiviata
   attraverso l’Interface Builder
• Ogni volta che accediamo ad uno xib viene
   ristabilita la connessione tra l’oggetto utilizzato
   nello xib e la variabile d’istanza ad esso collegata
                                                         iOS Bootcamp
Connettiamo




ctrl + click sul controllo + drag

                                    iOS Bootcamp
IBActions
- (IBAction)doSomething:(id)sender;




• Utilizzato al posto di void
• Dichiara che il metodo è una “Action”. In questo
   modo IB, come per gli IBOutlet, è consapevole
   della sua presenza e può collegarlo ad un evento
• Il parametro sender è controllo che manda il
   messaggio

                                               iOS Bootcamp
Connettiamo




ctrl + click sul controllo + drag

                                    iOS Bootcamp
La prima App...
   dalla teoria alla pratica




   Stefano Zanetti § The Alchemist
Il punto di ingresso: main.m

#import <UIKit/UIKit.h>
#import "AppDelegate.h"


int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil,
NSStringFromClass([AppDelegate class]));
    }
}




                                                    iOS Bootcamp
AppDelegate Start & End
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Il sistema notifica alla nostra applicazione che la fase di
caricamento è terminata
}


- (void)applicationWillTerminate:(UIApplication *)application
{
! Il sistema notifica alla nostra applicazione che l'utente o
//
il sistema stesso ha richiesto la chiusura della nostra
applicazione. Possiamo usare questo metodo per salvare lo
status della nostra applicazione.
}



                                                        iOS Bootcamp
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 l’applicazione sta passando dallo
//
stato di background a quello di inattiva. In questo metodo è
possibile ripristinare la maggior parte delle cambiamenti
effettuati prima di entrare in background.
}
- (void)applicationDidBecomeActive:(UIApplication *)application
{
! Il sistema notifica che l’applicazione è tornata attiva.
//
Utilizzare questo metodo per far ripartire i vari task attivi,
timers, eventualmente per effettuare un refresh
dell’interfaccia utente...
}


                                                        iOS Bootcamp
UIViewController


• Un UIViewController è controller generico utile
  per manipolare le UIView.
• Mette a disposizione diversi metodi che sono
  chiamati quando una vista appare o scompare.




                                             iOS Bootcamp
Di cosa abbiamo bisogno?


•   - (id)initWithNibName:(NSString *)nibNameOrNil bundle:
    (NSBundle *)nibBundleOrNil;

•   - (void)presentModalViewController:(UIViewController
    *)modalViewController animated:(BOOL)animated;

•   - (void)dismissModalViewControllerAnimated:(BOOL)animated;




                                                           iOS Bootcamp
Creare un ViewController



PMViewController *controller = [[[PMViewController alloc]
initWithNibName:@"PMViewController" bundle:nil] autorelease];




                                     Bundle in cui
     Nome del file xib
                                   cercare il file xib


                                                        iOS Bootcamp
Quale transizione utilizzare?

//    UIModalTransitionStyle:
//
//    UIModalTransitionStyleCoverVertical,
//    UIModalTransitionStyleFlipHorizontal,
//    UIModalTransitionStyleCrossDissolve,
//    UIModalTransitionStylePartialCurl,

[controller
setModalTransitionStyle:UIModalTransitionStyleCoverVertical];




                                                        iOS Bootcamp
Utilizziamo il ViewController

Presentiamo in modale il ViewController

[self presentModalViewController:controller animated:YES];




Rimuoviamo il ViewController

[self dismissModalViewControllerAnimated:YES];




                                                        iOS Bootcamp
Appear/Disappear

              Gestione visualizzazione view

•   - (void)viewWillAppear:(BOOL)animated

•   - (void)viewDidAppear:(BOOL)animated

•   - (void)viewWillDisappear:(BOOL)animated

•   - (void)viewDidDisappear:(BOOL)animated

•   - (void)viewDidLoad

•   - (BOOL)shouldAutorotateToInterfaceOrientation:
    (UIInterfaceOrientation)interfaceOrientation




                                                      iOS Bootcamp
Memory Warning!


- (void)viewDidLoad                    - (void)viewWillUnload




               - (void)didReceiveMemoryWarning




                                                       iOS Bootcamp
UINavigationController

Estende la classe UIViewController implementando
la navigazione, semplice e veloce, tra ViewControllers




                                               iOS Bootcamp
Push & Pop

            Navigazione tra ViewControllers:

•   - (id)initWithRootViewController:(UIViewController
    *)rootViewController;

•   - (void)pushViewController:(UIViewController
    *)viewController animated:(BOOL)animated;

•   - (NSArray *)popToViewController:(UIViewController
    *)viewController animated:(BOOL)animated;

•   - (NSArray *)popToRootViewControllerAnimated:
    (BOOL)animated;




                                                         iOS Bootcamp
RootViewController

        Inizializzazione UINavigationController


UIViewController *viewController = [[UIViewController alloc]
initWithNibName:@"ViewController" bundle:nil];


UINavigationController *navigationController =
[[UINavigationController alloc]
initWithRootViewController:viewController];


[viewController release];




                                                        iOS Bootcamp
Push

Creiamo e aggiungiamo un nuovo contenuto allo stack
dei ViewControllers

  UIViewController *detailViewController = [[UIViewController
  alloc] initWithNibName:@"detailViewController" bundle:nil];


  [self.navigationController
  pushViewController:detailViewController animated:YES];


  [detailViewController release];




                                                       iOS Bootcamp
Pop
Rimuoviamo il ViewController corrente dallo stack e
torniamo a quello precedente

[self.navigationController popViewControllerAnimated:YES];



Rimuoviamo tutti i ViewControllers dallo stack e
torniamo al rootViewController

[self.navigationController popToRootViewControllerAnimated:YES];




                                                        iOS Bootcamp
UITableView

Ecco qualche esempio di TableView:




                                     iOS Bootcamp
UITableView
Cosa ci serve?
 • un UITableViewController
                    Oppure:
 • un UIViewController
 • una UITableView
 • implementare correttamente
   UITableViewDataSource (rappresentazione dei
   dati) e il UITableViewDelegate (visualizzazione
   contenuto celle)
                                                iOS Bootcamp
UITableViewDataSource
• Obbligatori
 •   - (NSInteger)tableView:(UITableView *) UITableView
     numberOfRowsInSection:(NSInteger)section;

 •   - (UITableViewCell *)tableView:(UITableView *)
     UITableView cellForRowAtIndexPath:(NSIndexPath
     *)indexPath;


• Opzionali
 •   - (NSInteger)numberOfSectionsInTableView:(UITableView
     *)tableView;

 •   - (NSString *)tableView:(UITableView *)tableView
     titleForHeaderInSection:(NSInteger)section;

 •   ...


                                                          iOS Bootcamp
Data Model
                 Definiamo il modello dati

#import <UIKit/UIKit.h>

@interface PMFATableViewController :
UIViewController<UITableViewDataSource, UITableViewDelegate>
{
    UITableView *_tableView;
    NSArray *_elements;
}
@property (nonatomic, retain) IBOutlet UITableView *tableView;
@property (nonatomic, retain) NSArray *elements;

@end


                                                        iOS Bootcamp
Popoliamo l’array di oggetti

 - (void)viewDidLoad
 {
! [super viewDidLoad];

! NSArray *elements = [NSArray arrayWithObjects:@"Objective-C",
                         @"UIViewController",
                         @"UITabBarController",
                         @"UINavigationController",
                         @"UITableView",
                         nil];

! self.elements = 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 *)indexPath
{
  static NSString *cellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView
    dequeueReusableCellWithIdentifier:cellIdentifier];

    if (cell == nil)
    {
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
      reuseIdentifier:cellIdentifier] autorelease];
    }

    cell.textLabel.text = [_elements objectAtIndex:indexPath.row];

    return cell;
}




                                                                             iOS Bootcamp
Cell Identifier
  Descriviamo le singole righe della slide precedente:


CellIdentifier viene definito statico perchè questo metodo viene
richiamato moltissime volte. La parola chiave “static” permette
di non ricreare un oggetto se ne esiste già uno di quel tipo.


 static NSString *cellIdentifier = @"Cell";




                                                        iOS Bootcamp
Riutilizzare le celle

Il DataSource riutilizza gli oggetti UITableViewCell. Tramite
questo metodo chiediamo alla UITableView se esiste una cella
con quel particolare identifier che possiamo riutilizzare


 UITableViewCell *cell = [tableView
 dequeueReusableCellWithIdentifier:cellIdentifier];




                                                       iOS Bootcamp
UITableView
Nel caso non esista nessuna cella riutilizzabile ne creiamo una
nuova
 if (cell == nil)
 {
   cell = [[[UITableViewCell alloc]
   initWithStyle:UITableViewCellStyleDefault
   reuseIdentifier:cellIdentifier] autorelease];
 }


Aggiorniamo il testo della cella con la riga del nostro array
corrispondente alla riga dell’NSIndexPath interessato

 cell.textLabel.text = [_elements objectAtIndex:indexPath.row];



                                                           iOS Bootcamp
UITableViewDelegate
•   - (void)tableView:(UITableView *)tableView willDisplayCell:
    (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath
    *)indexPath;

•   - (CGFloat)tableView:(UITableView *)tableView
    heightForRowAtIndexPath:(NSIndexPath *)indexPath;

•   - (UIView *)tableView:(UITableView *)tableView
    viewForHeaderInSection:(NSInteger)section;

•   - (UIView *)tableView:(UITableView *)tableView
    viewForFooterInSection:(NSInteger)section;

•   - (void)tableView:(UITableView *)tableView
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath;

•   ...



                                                        iOS Bootcamp
What’s NeXT !?
                     Using Storyboard      iCl
       cat Push

                                                 ou
                                                    d
          ion

                                                        int
                                                           egr
No and




                                                                atio
                                                                    n
   tifi
  cal
Lo




                                                                 e
                                                              has
Ma Dat




                                                          urc
  nag a




                                                        pP
Co em
  red ent




                                                   Ap
     ata :          Advanced UITableView




                                                  In-
                         and custom
                      UITableViewCell

                                                              iOS Bootcamp
Thanks ☺




pragmamark.org

                 iOS Bootcamp

Mais conteúdo relacionado

Semelhante a Xcode - Just do it

Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsNoDelay Software
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchPaolo Musolino
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Todi Appy Days
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOSGaspare Novara
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitalelostrettodigitale
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire AppCommit University
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaDario Rusignuolo
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitMaurizio Delmonte
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS BuildGian Maria Ricci
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosèguesta10af3
 

Semelhante a Xcode - Just do it (20)

Programming iOS lezione 1
Programming iOS lezione 1Programming iOS lezione 1
Programming iOS lezione 1
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I Os
 
Wearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple WatchWearable Lab: Progettazione per Apple Watch
Wearable Lab: Progettazione per Apple Watch
 
Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015Progettazione per Apple Watch - Todi Appy Days 2015
Progettazione per Apple Watch - Todi Appy Days 2015
 
iOS_Course_8
iOS_Course_8iOS_Course_8
iOS_Course_8
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
Programming iOS lezione 2
Programming iOS lezione 2Programming iOS lezione 2
Programming iOS lezione 2
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Spring Intro
Spring IntroSpring Intro
Spring Intro
 
Sviluppare app native per iOS
Sviluppare app native per iOSSviluppare app native per iOS
Sviluppare app native per iOS
 
Sviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto DigitaleSviluppare apps native per iOS - Lo Stretto Digitale
Sviluppare apps native per iOS - Lo Stretto Digitale
 
Modi innovativi per costruire App
Modi innovativi per costruire AppModi innovativi per costruire App
Modi innovativi per costruire App
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - ita
 
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope ToolkitNon solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
Non solo Django: MVC orientato agli oggetti con Plone e Zope Toolkit
 
Integrazione continua con TFS Build
Integrazione continua con TFS BuildIntegrazione continua con TFS Build
Integrazione continua con TFS Build
 
WPF MVVM Toolkit
WPF MVVM ToolkitWPF MVVM Toolkit
WPF MVVM Toolkit
 
Slide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro AndreosèSlide Prelaurea. Alessandro Andreosè
Slide Prelaurea. Alessandro Andreosè
 
Introduzione a WatchKit
Introduzione a WatchKitIntroduzione a WatchKit
Introduzione a WatchKit
 
[Objective-C] - Introduzione
[Objective-C] - Introduzione[Objective-C] - Introduzione
[Objective-C] - Introduzione
 

Xcode - Just do it

  • 1. Just do it Apriamo Xcode e compiliamo... Stefano Zanetti § The Alchemist
  • 2. Stefano Zanetti  Apple iOS Developer Superpartes Innovation Campus & H-Farm  Co-founder di # Pragma Mark ― www.pragmamark.org  [tt] @stefanozanetti_ [in] Stefano Zanetti [fb] stefano.znt [email] zanetti.stefano@gmail.com iOS Bootcamp
  • 3. Di cosa parliamo oggi? • MVC - Design Pattern Modal View Controller • Xcode: introduzione alle funzioni base • Sviluppiamo la nostra prima App: • main.m • AppDelegate • UIViewController • UINavigationController • UITableViewController iOS Bootcamp
  • 4. MVC Coordinator Aggiorna Input utente Controller Model View Notifica Aggiorna Data Display Il design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  • 5. Model Descrive il/i modello/i dei dati utilizzato/i dalla nostra applicazione Definisce la logica con cui vengono manipolati questi dati. es: salvataggio, modifica, eliminazione... iOS Bootcamp
  • 6. View E’ ciò che l’utente vede • Sa come disegnarsi • Risponde alle azioni dell’utente iOS Bootcamp
  • 7. Controller E’ l’intermediario tra una o più View e uno o più Model • Interpreta le azioni dell’utente eseguite nella View e comunica al Model eventuali cambiamenti da apportare • Segnala alla View le variazioni ai dati compiute dal Model • Gestisce il ciclo di vita degli altri oggetti iOS Bootcamp
  • 8. Best practice 1. Utilizziamo l’MVC per dividere il lavoro 2. Impariamo a conoscere il Framework, non reinventiamolo. 3. Non abusiamo delle View 4. Minimiziamo le dipendenze mutuali 5. Dividiamo il codice in moduli iOS Bootcamp
  • 9. Xcode Jump Bar Inspector Editor/Builder Navigator Library Console iOS Bootcamp
  • 10. Navigator • Project Navigator (cmd + 1) • Symbol Navigator (cmd + 2) • Search Navigator (cmd + 3) • Issue Navigator (cmd + 4) • Debug Navigator (cmd + 5) • Breakpoints Navigator (cmd + 6) • Log Navigator (cmd + 7) iOS Bootcamp
  • 11. Inspector • File Inspector (alt + cmd + 1) • Quick Help Inspector (alt + cmd + 2) • Identity Inspector (alt + cmd + 3) • Attributes Inspector (alt + cmd + 4) • Size Inspector (alt + cmd + 5) • Connections Inspector (alt + cmd + 6) iOS Bootcamp
  • 12. Library • File Template Library (ctrl + alt + cmd + 1) • Code Snipped Library (ctrl + alt + cmd + 2) • Object Library (ctrl + alt + cmd + 3) • Media Library (ctrl + alt + cmd + 4) iOS Bootcamp
  • 13. Jump Bar • Mostra il percorso relativo del file corrente • Ci permette di navigare velocemente tra i file che si trovano allo stesso livello iOS Bootcamp
  • 14. IBOutlet @property (nonatomic, retain) IBOutlet UILabel *label; • Rappresenta una variabile d’istanza che referenzia un altro oggetto • Questa referenza è configurata ed archiviata attraverso l’Interface Builder • Ogni volta che accediamo ad uno xib viene ristabilita la connessione tra l’oggetto utilizzato nello xib e la variabile d’istanza ad esso collegata iOS Bootcamp
  • 15. Connettiamo ctrl + click sul controllo + drag iOS Bootcamp
  • 16. IBActions - (IBAction)doSomething:(id)sender; • Utilizzato al posto di void • Dichiara che il metodo è una “Action”. In questo modo IB, come per gli IBOutlet, è consapevole della sua presenza e può collegarlo ad un evento • Il parametro sender è controllo che manda il messaggio iOS Bootcamp
  • 17. Connettiamo ctrl + click sul controllo + drag iOS Bootcamp
  • 18. La prima App... dalla teoria alla pratica Stefano Zanetti § The Alchemist
  • 19. Il punto di ingresso: main.m #import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } iOS Bootcamp
  • 20. AppDelegate Start & End - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Il sistema notifica alla nostra applicazione che la fase di caricamento è terminata } - (void)applicationWillTerminate:(UIApplication *)application { ! Il sistema notifica alla nostra applicazione che l'utente o // il sistema stesso ha richiesto la chiusura della nostra applicazione. Possiamo usare questo metodo per salvare lo status della nostra applicazione. } iOS Bootcamp
  • 21. Enter in Background - (void)applicationWillResignActive:(UIApplication *)application { // Il sistema notifica alla nostra applicazione che sta per diventare inattiva. Disabilitare Timer, mettere in pausa i Task, ... } - (void)applicationDidEnterBackground:(UIApplication *)application { // Se la nostra applicazione supporta il background, questo metodo viene chiamato al posto del applicationWillTerminate. Utilizzate questo metodo per rilasciare le risorse, salvare i dati, invalidare i timers... } iOS Bootcamp
  • 22. Enter in Foreground - (void)applicationWillEnterForeground:(UIApplication *)application { ! Il sistema notifica che l’applicazione sta passando dallo // stato di background a quello di inattiva. In questo metodo è possibile ripristinare la maggior parte delle cambiamenti effettuati prima di entrare in background. } - (void)applicationDidBecomeActive:(UIApplication *)application { ! Il sistema notifica che l’applicazione è tornata attiva. // Utilizzare questo metodo per far ripartire i vari task attivi, timers, eventualmente per effettuare un refresh dell’interfaccia utente... } iOS Bootcamp
  • 23. UIViewController • Un UIViewController è controller generico utile per manipolare le UIView. • Mette a disposizione diversi metodi che sono chiamati quando una vista appare o scompare. iOS Bootcamp
  • 24. Di cosa abbiamo bisogno? • - (id)initWithNibName:(NSString *)nibNameOrNil bundle: (NSBundle *)nibBundleOrNil; • - (void)presentModalViewController:(UIViewController *)modalViewController animated:(BOOL)animated; • - (void)dismissModalViewControllerAnimated:(BOOL)animated; iOS Bootcamp
  • 25. Creare un ViewController PMViewController *controller = [[[PMViewController alloc] initWithNibName:@"PMViewController" bundle:nil] autorelease]; Bundle in cui Nome del file xib cercare il file xib iOS Bootcamp
  • 26. Quale transizione utilizzare? // UIModalTransitionStyle: // // UIModalTransitionStyleCoverVertical, // UIModalTransitionStyleFlipHorizontal, // UIModalTransitionStyleCrossDissolve, // UIModalTransitionStylePartialCurl, [controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; iOS Bootcamp
  • 27. Utilizziamo il ViewController Presentiamo in modale il ViewController [self presentModalViewController:controller animated:YES]; Rimuoviamo il ViewController [self dismissModalViewControllerAnimated:YES]; iOS Bootcamp
  • 28. Appear/Disappear Gestione visualizzazione view • - (void)viewWillAppear:(BOOL)animated • - (void)viewDidAppear:(BOOL)animated • - (void)viewWillDisappear:(BOOL)animated • - (void)viewDidDisappear:(BOOL)animated • - (void)viewDidLoad • - (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation iOS Bootcamp
  • 29. Memory Warning! - (void)viewDidLoad - (void)viewWillUnload - (void)didReceiveMemoryWarning iOS Bootcamp
  • 30. UINavigationController Estende la classe UIViewController implementando la navigazione, semplice e veloce, tra ViewControllers iOS Bootcamp
  • 31. Push & Pop Navigazione tra ViewControllers: • - (id)initWithRootViewController:(UIViewController *)rootViewController; • - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; • - (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated; • - (NSArray *)popToRootViewControllerAnimated: (BOOL)animated; iOS Bootcamp
  • 32. RootViewController Inizializzazione UINavigationController UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; [viewController release]; iOS Bootcamp
  • 33. Push Creiamo e aggiungiamo un nuovo contenuto allo stack dei ViewControllers UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"detailViewController" bundle:nil]; [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; iOS Bootcamp
  • 34. Pop Rimuoviamo il ViewController corrente dallo stack e torniamo a quello precedente [self.navigationController popViewControllerAnimated:YES]; Rimuoviamo tutti i ViewControllers dallo stack e torniamo al rootViewController [self.navigationController popToRootViewControllerAnimated:YES]; iOS Bootcamp
  • 35. UITableView Ecco qualche esempio di TableView: iOS Bootcamp
  • 36. UITableView Cosa ci serve? • un UITableViewController Oppure: • un UIViewController • una UITableView • implementare correttamente UITableViewDataSource (rappresentazione dei dati) e il UITableViewDelegate (visualizzazione contenuto celle) iOS Bootcamp
  • 37. UITableViewDataSource • Obbligatori • - (NSInteger)tableView:(UITableView *) UITableView numberOfRowsInSection:(NSInteger)section; • - (UITableViewCell *)tableView:(UITableView *) UITableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; • Opzionali • - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView; • - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section; • ... iOS Bootcamp
  • 38. Data Model Definiamo il modello dati #import <UIKit/UIKit.h> @interface PMFATableViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> { UITableView *_tableView; NSArray *_elements; } @property (nonatomic, retain) IBOutlet UITableView *tableView; @property (nonatomic, retain) NSArray *elements; @end iOS Bootcamp
  • 39. Popoliamo l’array di oggetti - (void)viewDidLoad { ! [super viewDidLoad]; ! NSArray *elements = [NSArray arrayWithObjects:@"Objective-C", @"UIViewController", @"UITabBarController", @"UINavigationController", @"UITableView", nil]; ! self.elements = elements; } iOS Bootcamp
  • 40. Configuriamo il DataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { ! return [_elements count]; } iOS Bootcamp
  • 41. Configuriamo il DataSource - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { static NSString *cellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; } cell.textLabel.text = [_elements objectAtIndex:indexPath.row]; return cell; } iOS Bootcamp
  • 42. Cell Identifier Descriviamo le singole righe della slide precedente: CellIdentifier viene definito statico perchè questo metodo viene richiamato moltissime volte. La parola chiave “static” permette di non ricreare un oggetto se ne esiste già uno di quel tipo. static NSString *cellIdentifier = @"Cell"; iOS Bootcamp
  • 43. Riutilizzare le celle Il DataSource riutilizza gli oggetti UITableViewCell. Tramite questo metodo chiediamo alla UITableView se esiste una cella con quel particolare identifier che possiamo riutilizzare UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; iOS Bootcamp
  • 44. UITableView Nel caso non esista nessuna cella riutilizzabile ne creiamo una nuova if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; } Aggiorniamo il testo della cella con la riga del nostro array corrispondente alla riga dell’NSIndexPath interessato cell.textLabel.text = [_elements objectAtIndex:indexPath.row]; iOS Bootcamp
  • 45. UITableViewDelegate • - (void)tableView:(UITableView *)tableView willDisplayCell: (UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath; • - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; • - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; • - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section; • - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath; • ... iOS Bootcamp
  • 46. What’s NeXT !? Using Storyboard iCl cat Push ou d ion int egr No and atio n tifi cal Lo e has Ma Dat urc nag a pP Co em red ent Ap ata : Advanced UITableView In- and custom UITableViewCell iOS Bootcamp