Xcode - Just do it

1,729 views

Published on

Apriamo Xcode e compiliamo!

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,729
On SlideShare
0
From Embeds
0
Number of Embeds
49
Actions
Shares
0
Downloads
26
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Xcode - Just do it

  1. 1. Just do itApriamo 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 DisplayIl design pattern MVC assegna ad ogni oggetto un ruolo preciso: Model,View o Controller iOS Bootcamp
  5. 5. ModelDescrive il/i modello/i dei dati utilizzato/i dalla nostraapplicazioneDefinisce la logica con cui vengono manipolati questidati. es: salvataggio, modifica, eliminazione... iOS Bootcamp
  6. 6. ViewE’ ciò che l’utente vede• Sa come disegnarsi• Risponde alle azioni dell’utente iOS Bootcamp
  7. 7. ControllerE’ 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 practice1. Utilizziamo l’MVC per dividere il lavoro2. Impariamo a conoscere il Framework, non reinventiamolo.3. Non abusiamo delle View4. Minimiziamo le dipendenze mutuali5. Dividiamo il codice in moduli iOS Bootcamp
  9. 9. Xcode Jump Bar Inspector Editor/BuilderNavigator 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. Connettiamoctrl + 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. Connettiamoctrl + 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 *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// Il sistema notifica alla nostra applicazione che la fase dicaricamento è terminata}- (void)applicationWillTerminate:(UIApplication *)application{! Il sistema notifica alla nostra applicazione che lutente o//il sistema stesso ha richiesto la chiusura della nostraapplicazione. Possiamo usare questo metodo per salvare lostatus della nostra applicazione.} iOS Bootcamp
  21. 21. Enter in Background- (void)applicationWillResignActive:(UIApplication*)application{// Il sistema notifica alla nostra applicazione che sta perdiventare inattiva. Disabilitare Timer, mettere in pausa iTask, ...}- (void)applicationDidEnterBackground:(UIApplication*)application{// Se la nostra applicazione supporta il background, questometodo viene chiamato al posto del applicationWillTerminate.Utilizzate questo metodo per rilasciare le risorse, salvare idati, 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 cambiamentieffettuati 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 refreshdell’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 ViewControllerPMViewController *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,[controllersetModalTransitionStyle:UIModalTransitionStyleCoverVertical]; iOS Bootcamp
  27. 27. Utilizziamo il ViewControllerPresentiamo 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. UINavigationControllerEstende la classe UIViewController implementandola 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 UINavigationControllerUIViewController *viewController = [[UIViewController alloc]initWithNibName:@"ViewController" bundle:nil];UINavigationController *navigationController =[[UINavigationController alloc]initWithRootViewController:viewController];[viewController release]; iOS Bootcamp
  33. 33. PushCreiamo e aggiungiamo un nuovo contenuto allo stackdei ViewControllers UIViewController *detailViewController = [[UIViewController alloc] initWithNibName:@"detailViewController" bundle:nil]; [self.navigationController pushViewController:detailViewController animated:YES]; [detailViewController release]; iOS Bootcamp
  34. 34. PopRimuoviamo il ViewController corrente dallo stack etorniamo a quello precedente[self.navigationController popViewControllerAnimated:YES];Rimuoviamo tutti i ViewControllers dallo stack etorniamo al rootViewController[self.navigationController popToRootViewControllerAnimated:YES]; iOS Bootcamp
  35. 35. UITableViewEcco qualche esempio di TableView: iOS Bootcamp
  36. 36. UITableViewCosa 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 *)tableViewnumberOfRowsInSection:(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 vienerichiamato moltissime volte. La parola chiave “static” permettedi non ricreare un oggetto se ne esiste già uno di quel tipo. static NSString *cellIdentifier = @"Cell"; iOS Bootcamp
  43. 43. Riutilizzare le celleIl DataSource riutilizza gli oggetti UITableViewCell. Tramitequesto metodo chiediamo alla UITableView se esiste una cellacon quel particolare identifier che possiamo riutilizzare UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier]; iOS Bootcamp
  44. 44. UITableViewNel caso non esista nessuna cella riutilizzabile ne creiamo unanuova if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease]; }Aggiorniamo il testo della cella con la riga del nostro arraycorrispondente 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 egrNo and atio n tifi calLo e hasMa Dat urc nag a pPCo em red ent Ap ata : Advanced UITableView In- and custom UITableViewCell iOS Bootcamp
  47. 47. Thanks ☺pragmamark.org iOS Bootcamp

×