Successfully reported this slideshow.
Your SlideShare is downloading. ×

Xcode - Just do it

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Xcode - Just do it
Xcode - Just do it
Loading in …3
×

Check these out next

1 of 47 Ad

More Related Content

Similar to Xcode - Just do it (20)

Recently uploaded (20)

Advertisement

Xcode - Just do it

  1. 1. Just do it Apriamo Xcode e compiliamo... Stefano Zanetti § The Alchemist
  2. 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. 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. 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. 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. 6. View E’ ciò che l’utente vede • Sa come disegnarsi • Risponde alle azioni dell’utente iOS Bootcamp
  7. 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. 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. 9. Xcode Jump Bar Inspector Editor/Builder Navigator Library Console iOS Bootcamp
  10. 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. 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. 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. 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. 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. 15. Connettiamo ctrl + click sul controllo + drag iOS Bootcamp
  16. 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. 17. Connettiamo ctrl + click sul controllo + drag iOS Bootcamp
  18. 18. La prima App... dalla teoria alla pratica Stefano Zanetti § The Alchemist
  19. 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. 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. 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. 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. 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. 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. 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. 26. Quale transizione utilizzare? // UIModalTransitionStyle: // // UIModalTransitionStyleCoverVertical, // UIModalTransitionStyleFlipHorizontal, // UIModalTransitionStyleCrossDissolve, // UIModalTransitionStylePartialCurl, [controller setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; iOS Bootcamp
  27. 27. Utilizziamo il ViewController Presentiamo in modale il ViewController [self presentModalViewController:controller animated:YES]; Rimuoviamo il ViewController [self dismissModalViewControllerAnimated:YES]; iOS Bootcamp
  28. 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. 29. Memory Warning! - (void)viewDidLoad - (void)viewWillUnload - (void)didReceiveMemoryWarning iOS Bootcamp
  30. 30. UINavigationController Estende la classe UIViewController implementando la navigazione, semplice e veloce, tra ViewControllers iOS Bootcamp
  31. 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. 32. RootViewController Inizializzazione UINavigationController UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; [viewController release]; iOS Bootcamp
  33. 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. 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. 35. UITableView Ecco qualche esempio di TableView: iOS Bootcamp
  36. 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. 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. 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. 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. 40. Configuriamo il DataSource - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { ! return [_elements count]; } iOS Bootcamp
  41. 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. 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. 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. 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. 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. 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
  47. 47. Thanks ☺ pragmamark.org iOS Bootcamp

×