Se ci si trova a sviluppare in un ambiente dove è impossibile usare tool di debug come FireBug, come ad esempio il simulatore Apple iPad di Xcode, può diventare frustante individuare problemi, uno tra tutto l’errato accesso alle proprietà di un oggetto. Ecco che l’uso della funziona alert() diventa fondamentale!
Articoli con Tag ‘Alert’
Very short trick: log degli oggetti Javascript
Come sviluppare in PHP con Xcode e Objective-C
Come molti programmatori usano fare, anch’io mi costruisco le mie librerie di funzioni pronte per essere riutilizzate in più progetti e in più contesti. Lasciatemi passare il titolo di questo post, forse un po’ azzardato ma, tuttavia, come vedremo, non lontano dalla realtà.
In Objective-C è possibile scrivere e chiamare codice C/C++, compreso l’assembly se è per questo. Questa sua caratteristica lo rende un linguaggio davvero versatile e, per certi aspetti, fenomenale. Da un lato, infatti, è possibile utilizzare e apprezzare la sintassi prettamente Objective-C, dall’altro è possibile eseguire velocemente porting di codice scritto in ANSI C (magari per Digital Unix o Sun) e utilizzarlo comodamente nelle nostre applicazioni iPhone o iPad; per non parlare di tutto il Kernel BSD già disponibile su Mac OS X!
iPhone code snippet: UIAlertView
La classe UIAletrView permette di mostrare una finestra modale (animata) per informare e/o chiedere qualcosa all’utente. Le UIAlterView (viste alert) sono molto comode e semplici da usare. Anche la gestione della risposta utente viene risolta intercettando l’indice del bottone premuto. Per visualizzare un semplice UIAlterView basta scrivere:
1 2 3 4 | // semplice Alert con un bottone, senza callback UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" cancelButtonTitle:@"Annulla" otherButtonTitles: nil]; [myAlert show]; [myAlert release]; |
E’ possibile aggiungere ulteriori bottoni in otherButtonTitles:
1 2 3 4 | // semplice Alert con due bottoni, senza callback UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil]; [myAlert show]; [myAlert release]; |
Per determinare quale bottone è stato premuto, basta aggiungere la delegate:self nell’inizializzazione dell’oggetto UIAlterView:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | // semplice Alert con due bottoni e callback UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil]; [myAlert show]; [myAlert release]; // la callback ha questa sintassi - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { switch ( buttonIndex ) { case 1: // codice break; } } |
La callback alertView deve avere necessariamente quel nome; per maggiori informazioni vedi UIAlertViewDelegate
Avendo a disposizione solo la callbck alertView:clickedButtonAtIndex, più UIAletrView punteranno sempre a quella. Utilizzando il campo tag dell’oggetto UIAletrView, possiamo determinare quale sia il “chiamante”:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // semplice Alert con due bottoni e callback UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil]; myAlertA.tag = 1; [myAlertA show]; [myAlertA release]; // UIAlertView *myAlertB = [[UIAlertView alloc] initWithTitle:@"Titolo" message:@"Messaggio" delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"Ok", nil]; myAlertA.tag = 2; [myAlertB show]; [myAlertB release]; // gestione multipla UIAlertView - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"Alert Tag: %i", alertView.tag); NSLog(@"buttonIndex: %i", buttonIndex); } |
Creare MovieClip modali in TopMost
Illustrerò una tecnica per realizzare simboli (MovieClip) modali da usare similmente ai componenti Alert e Window di Flash. L’obiettivo è quello di mostrare un MovieClip sopra tutti gli altri, disabilitando – anche – l’accesso all’area sottostante e qualsiasi altro oggetto/componente presente. Ad essere sincero ho realizzato tutto ciò eseguendo un po’ di reverse engineering dai codici Adobe, che sono in chiaro! Non ho proprio resistito
L’artefizio che si usa, per disabilitare qualsiasi interfaccia presente al di sotto del nostro MovieClip, è quella di creare un MovieClip trasparente che prenda tutta l’area dello stage. A questo MovieClip, che non sarà praticamente visibile, si aggancia un metodo “nullo” sull’evento onRelease, stando attenti ad impostare la proprietà useHandCursor a false.
Prima di tutto creiamo un filmato con una qualsiasi interfaccia nello stage principale:






Ultimi Commenti
Giovambattista Fazioli: @ale: Come indicato @Kevin vedi sul repo di GitHub: https://github.com/gfazioli/Ch roma-Key
Giovambattista Fazioli: @Kevin: See https://github.com/gfazioli/Ch roma-Key
Kevin: Very nice example – would like to see the .fla too!
Ludovica: Ciao! Ti spiego il mio dubbio. Quando scrivo un post non inserisco immagini nell’articolo (se così...
Marco: ciao @Giovambattista Fazioli, grazie per tutte le delucidazioni di questa ottima guida. Avrei un quesito da...