{"id":2813,"date":"2010-03-31T11:31:25","date_gmt":"2010-03-31T09:31:25","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=2813"},"modified":"2010-03-31T11:31:25","modified_gmt":"2010-03-31T09:31:25","slug":"uialertview-guida-completa-all-uso","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/uialertview-guida-completa-all-uso\/","title":{"rendered":"UIAlertView &#8211; Guida completa all\u2019uso"},"content":{"rendered":"<p>Ogni buon programma dovrebbe intercettare eventuali errori che si manifestano durante l&#8217;uso del programma, dovuti all&#8217;azione degli utenti o per qualunque altra causa esterna, e mostrare sul display un messaggio che li aiuti a correggere le scelte errate o comunque a capire cosa sta accadendo e perch\u00e8 l&#8217;applicazione ha smesso di funzionare. Potreste inoltre aver bisogno per un qualsiasi altro motivo di attirare semplicemente l&#8217;attenzione dell&#8217;utente. Per tutto questo viene in nostro aiuto l&#8217;oggetto <strong>UIAlertView<\/strong>.<!--more--><\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2814\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/IMG_0095-200x300.png\" alt=\"Alert View Example\" width=\"200\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/IMG_0095-200x300.png 200w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/IMG_0095.png 320w\" sizes=\"auto, (max-width: 200px) 100vw, 200px\" \/><br \/>\n<\/center><\/p>\n<h4>Le basi<\/h4>\n<p>L&#8217;utilizzo di una alert view a livelli basilari non presenta difficolt\u00e0. Il seguente codice, ad esempio, far\u00e0 apparire un semplice avviso contenente un titolo, un messaggio e un bottone &#8220;OK&#8221; per la chiusura dello stesso:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nUIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@\"Alert View Title\" message:@\"Alert View Text\" delegate:nil cancelButtonTitle:nil otherButtonTitles:@\"OK\", nil];\r\n[alertView show];\r\n[alertView release];\r\n<\/pre>\n<p>Analiziamo insieme il codice:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nUIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@\"Alert View Title\" message:@\"Alert View Text\" delegate:nil cancelButtonTitle:nil otherButtonTitles:@\"OK\", nil];\r\n<\/pre>\n<p>Questa riga di codice <strong>inizializza<\/strong> il nostro alert.<\/p>\n<p><strong>Title<\/strong> e <strong>message<\/strong> sono rispettivamente il titolo ed il messaggio dell&#8217;alert; essi si distinguono inoltre per lo spessore del carattere: il primo \u00e8 in grassetto mentre il secondo no.<\/p>\n<p><strong>Delegate<\/strong> \u00e8 il delegato dell&#8217;alert. In questo caso il suo attributo \u00e8 nullo, ma nella fase successiva della guida non lo sar\u00e0 pi\u00f9.<\/p>\n<p><strong>CancelButtonTitle<\/strong> \u00e8 il titolo del bottone che in genere viene usato per cancellare un&#8217;azione ed \u00e8 espresso con una NSString. Nel nostro esempio abbiamo deciso di non metterlo poich\u00e9 non vi era il bisogno di cancellare nulla.<\/p>\n<p><strong>OtherButtonTitles<\/strong> sono i titoli di tutti i restanti bottoni che vogliamo mettere. L&#8217;attributo \u00e8 composto da una serie di NSString (ricordatevi di chiuderla con nil!).<\/p>\n<p>Alla pressione di un bottone l&#8217;avviso scomparir\u00e0 automaticamente.<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n[alertView show];\r\n<\/pre>\n<p>Questa istruzione serve a mostrare l&#8217;alert con la sua relativa animazione, penso che non vi sia da aggiungere altro.<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n[alertView release];\r\n<\/pre>\n<p>Avendo prima allocato l&#8217;oggetto \u00e8 importante rilasciarlo!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-21.17.30.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2815\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-21.17.30-161x300.png\" alt=\"Alert 1\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-21.17.30-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-21.17.30.png 414w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Interagire con l&#8217;utente<\/h4>\n<p>Vediamo ora come possiamo effettuare certe azioni in base alla risposta dell&#8217;utente ad un avviso.<br \/>\nVogliamo far s\u00ec che alla pressione del bottone &#8220;OK&#8221; venga mostrato in console un messaggio, mentre alla pressione del pulsante &#8220;Cancel&#8221; non venga mostrato nulla.<br \/>\nPer &#8220;captare&#8221; la risposta dell&#8217;utente all&#8217;avviso abbiamo bisogno di implementare il protocollo <em>UIAlertViewDelegate<\/em> nella classe del nostro documento (generalmente il file di intestazione .h).<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n@interface MiaSottoclasse : NSObject <UIAlertViewDelegate> {\r\n}\r\n<\/pre>\n<p>Il nome della sottoclasse e della classe varier\u00e0 ovviamente a seconda del progetto.<\/p>\n<p>Come possiamo osservare anche nella <a href=\"http:\/\/developer.apple.com\/iphone\/library\/documentation\/UIKit\/Reference\/UIAlertViewDelegate_Protocol\/UIAlertViewDelegate\/UIAlertViewDelegate.html\" target=\"_blank\">documentazione Apple<\/a> il protocollo ci offre nuovi metodi con i quali essere notificati.<\/p>\n<p>Prendiamo in considerazione questo:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex\r\n<\/pre>\n<p>Il metodo relativo al tasto premuto viene chiamato quando una Alert View si accinge a sparire. Nei suoi attributi troviamo infatti l&#8217;index, (l&#8217;identificativo) del bottone premuto. L&#8217;index va da 0, per il primo tasto in ordine di apparizione, a salire.<\/p>\n<p>Inizializiamo il nostro avviso come visto in precedenza, questa volta specificando come delegato <em>self<\/em>, ovvero la propria classe e mettendo come attributo in <em>cancelButtonTitle: @&#8221;Cancel&#8221;<\/em>.<\/p>\n<p>Modifichiamo ora il nostro metodo:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex{\r\n    if(buttonIndex == 0){\r\n        \/\/ \u00c8 stato premuto il bottone Cancel\r\n    } else if (buttonIndex == 1){\r\n        \/\/\u00c8 stato premuto il bottone OK\r\n        NSLog(@\"Bottone premuto: OK!\");\r\n    }\r\n}\r\n<\/pre>\n<p>Nella nostra modifica \u00e8 stato semplicemente aggiunto un ciclo if e un NSLog che mostra il messaggio in Console.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.13.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2823\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.13-161x300.png\" alt=\"Alert 2\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.13-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.13.png 414w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><br \/>\n<\/center><\/p>\n<h4>Customizzare una Alert View<\/h4>\n<p>Le Alert View non vengono solo utilizzate per comunicare errori o per messaggi o conferme agli utenti delle nostre applicazioni, possono essere infatti impiegate anche per mostrare altre informazioni. Ad esempio, potremmo usare un&#8217;AlertView personalizzata per mostrare il caricamento di un&#8217;altra vista, ovviamente per\u00f2 potremo farlo grazie ad alcune piccole modifiche. Ricordate infatti che una Alert View, \u00e8 di fatti un UIView, (da cui eredita propriet\u00e0 e metodi), e essendo tale, \u00e8 in gran parte modificabile.<\/p>\n<p>In questa parte della nostra guida vogliamo integrare in essa un indicatore di caricamento (UIActivityIndicatorView).<\/p>\n<p>Per prima cosa inizializiamo la nostra &#8220;rotellina&#8221; e facciamola partire:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nUIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];\r\n\t\/\/La posizione dell'indicatore varia dal testo dell'alert\r\n\tactivityView.frame = CGRectMake(121.0f, 50.0f, 37.0f, 37.0f);\r\n\t[activityView startAnimating];\r\n<\/pre>\n<p>Ora aggiungiamola al nostro alert e rilasciamola:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\nalertView3 = [[UIAlertView alloc] initWithTitle:@\"Loading\" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];\r\n\t\/\/Aggiungo l'indicatore come una subview\r\n\t[alertView3 addSubview:activityView];\r\n\t[activityView release];\r\n\t[alertView3 show];\r\n<\/pre>\n<p>Quando proverete l&#8217;avviso noterete che non avrete alcun bottone per dimetterlo; sarete infatti voi a farlo via codice quando avrete finito di caricare tramite questa semplice istruzione:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n[alertView3 dismissWithClickedButtonIndex:0 animated:YES];\r\n<\/pre>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.27.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2825\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.27-161x300.png\" alt=\"Alert 3\" width=\"161\" height=\"300\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.27-161x300.png 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/03\/Screen-shot-2010-03-30-at-22.00.27.png 414w\" sizes=\"auto, (max-width: 161px) 100vw, 161px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ogni alert \u00e8 completamente customizzabile, potete infatti <a href=\"http:\/\/www.devapp.it\/wordpress\/t022-inseriamo-un-uitextfield-in-un-uialertview-by-icodeblog.html\" target=\"_blank\">aggiungervi Text Fields<\/a>, Sliders e quello che pi\u00f9 preferite. Tenete comunque presente che il motivo per cui sono nati gli alert \u00e8 esclusivamente quello di richiedere l&#8217;attenzione dell&#8217;utente!<\/p>\n<p>Nel caso abbiate problemi nel seguire il codice della guida o vogliate per semplice curiosit\u00e0 scaricare il progetto contenente tutti gli esempi lo potete fare da <a href=\"http:\/\/www.guidolodetti.com\/DevAPP\/UIAlertView.zip\" target=\"_blank\">qui<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ogni buon programma dovrebbe intercettare eventuali errori che si manifestano durante l&#8217;uso del programma, dovuti all&#8217;azione degli&#8230;<\/p>\n","protected":false},"author":197,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[42],"tags":[42,5,4,161,93],"class_list":["post-2813","post","type-post","status-publish","format-standard","hentry","category-framework","tag-framework","tag-objective-c","tag-programmazione","tag-uiactivityindicator","tag-uialertview"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/197"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=2813"}],"version-history":[{"count":20,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2813\/revisions"}],"predecessor-version":[{"id":2832,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/2813\/revisions\/2832"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=2813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=2813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=2813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}