{"id":825,"date":"2009-11-15T11:00:49","date_gmt":"2009-11-15T10:00:49","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=825"},"modified":"2010-03-25T15:29:03","modified_gmt":"2010-03-25T14:29:03","slug":"t008-creiamo-un-browser","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t008-creiamo-un-browser\/","title":{"rendered":"T#008 &#8211; Creiamo un Browser"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1.jpg\" alt=\"t008_IS\" title=\"t008_IS\" width=\"80\" height=\"120\" class=\"alignleft size-full wp-image-836\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1-200x300.jpg 200w\" sizes=\"auto, (max-width: 80px) 100vw, 80px\" \/> Oggi creeremo un semplice browser completo di tutte le funzionalit\u00e0 necessarie per la navigazione su internet. Il tutto sar\u00e0 incentrato sull&#8217;oggetto UIWebView, dove verranno appunto caricate le pagine web che andremo a visitare. Aprite Xcode, cliccate su &#8220;Nuovo progetto&#8221;, selezionate &#8220;View-based Application&#8221; dall&#8217;elenco dei Template disponibili e proseguite. Inserite un nome per la vostra applicazione, ad esempio &#8220;MyBrowser&#8221;, scegliete quindi la posizione dove salvare e andate avanti. Apriamo il file &#8220;myBrowserViewController.h&#8221; e creiamo 2 oggetti. Il primo di tipo UIWebView, che chiamiamo semplicemente webView, e il secondo un UITextField, che chiameremo &#8220;Indirizzo&#8221; e che ci servir\u00e0 per inserire gli indirizzi dei siti da visitare. Entrambi gli oggetti andranno poi collegati tramite Interface Builder ai rispettivi oggetti che disegneremo nell&#8217;interfaccia grafica pi\u00f9 avanti.<!--more--> Dichiariamo inoltre le property per i due oggetti che ci permetteranno di usare le loro propriet\u00e0 nel nostro progetto. Il codice sar\u00e0 come il seguente:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n\r\n@interface myBrowserViewController : UIViewController {\r\n    IBOutlet UIWebView *webView;\r\n    IBOutlet UITextField *indirizzo;\r\n}\r\n\r\n@property (nonatomic, retain) IBOutlet UIWebView *webView;\r\n@property (nonatomic, retain) IBOutlet UITextField *indirizzo;\r\n\r\n- (IBAction)apriPagina;\r\n\r\n@end\r\n<\/pre>\n<p>Apriamo ora Interface Builder facendo doppio click sul file &#8220;myBrowserViewController.xib&#8221; e disegnamo la nostra interfaccia grafica. Trascinate, posizionate e modificate le propriet\u00e0, come mostrato nella figura sotto l&#8217;elenco, dei seguenti oggetti:<\/p>\n<ul>\n<li>N. 1 UIToolBar<\/li>\n<li>N. 4 UIBarButtonItem (da posizionare dentro la UIToolBar)<\/li>\n<li>N. 1 Flexible Space Bar Button Item (da posizionare tra i Button Item nella ToolBar come in figura)<\/li>\n<li>N. 1 UIWebView<\/li>\n<li>N. 1 UITextField<\/li>\n<li>N. 1 UIButton<\/li>\n<\/ul>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IB.jpg\" alt=\"t008_IB\" title=\"t008_IB\" width=\"320\" height=\"502\" class=\"aligncenter size-full wp-image-828\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IB.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IB-191x300.jpg 191w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><br \/>\n<\/center><\/p>\n<p>Effettuiamo ora i collegamenti tra gli oggetti appena creati e quelli creati da Xcode. Clicchiamo su File&#8217;s Owner e colleghiamo &#8220;Indirizzo&#8221; con l&#8217;UITextField,  webView con l&#8217;UIWebView e &#8220;apriPagina&#8221; con l&#8217;UIButton, facendo attenzione a selezionare &#8220;Touch Up Inside&#8221;. Clicchiamo quindi sulla UIWebView e colleghiamo le quattro &#8220;Received Action&#8221; presenti con i rispettivi pulsanti nella ToolBar inseriti in precedenza. Salviamo e torniamo ad Xcode.<\/p>\n<p>Apriamo il file &#8220;myBrowserViewController.m&#8221; e andiamo quindi a scrivere il codice vero e proprio della nostra applicazione:<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n\/\/Con la direttiva @synthetize potremo accedere a tutte le propriet\u00e0 dei rispettivi oggetti\r\n@synthesize webView;\r\n@synthesize indirizzo;\r\n\r\n- (IBAction)apriPagina{\r\n\tNSString *strIndirizzo = indirizzo.text;\r\n\tNSURL *url = [NSURL URLWithString:strIndirizzo];\r\n\tNSURLRequest *request = [NSURLRequest requestWithURL:url];\r\n\t[webView loadRequest:request];\r\n\t[webView setScalesPageToFit:YES];\r\n}\r\n\r\n- (void)viewDidLoad {\r\n    [super viewDidLoad];\r\n\tNSString *strIndirizzo = @\"http:\/\/www.devapp.it\/\";\r\n\tNSURL *url = [NSURL URLWithString:strIndirizzo];\r\n\tNSURLRequest *request = [NSURLRequest requestWithURL:url];\r\n\t[webView loadRequest:request];\r\n\t[webView setScalesPageToFit:YES];\r\n}\r\n<\/pre>\n<p>Iniziamo a vedere come funziona il metodo &#8220;apriPagina&#8221;. Abbiamo creato un oggetto NSString, chiamato &#8220;strIndirizzo&#8221; a cui passeremo il contenuto della UITextField, ovvero l&#8217;indirizzo che vorremo visitare durante l&#8217;esecuzione del programma.  L&#8217;indirizzo viene quindi passato a un oggetto NSURL che passer\u00e0 a sua volta ad un&#8217;altro di tipo NSURLRequest, chiamato &#8220;request&#8221;, che useremo infine per caricare la pagina tramite il metodo &#8220;loadRequest&#8221; della UIWebView. L&#8217;ultima istruzione, setScalesPageToFit:YES , serve ad abilitare lo zoom (e di conseguenza lo scrool) nelle pagine che andremo a visitare.<\/p>\n<p>Inseriamo pi\u00f9 o meno lo stesso codice al caricamento della view, quindi all&#8217;interno del metodo &#8220;viewDidLoad&#8221;, che dovremo &#8220;scommentare&#8221;, per\u00f2 questa volta impostiamo esplicitamente un indirizzo web, che sar\u00e0 la nostra pagina predefinita all&#8217;apertura del programma, nel nostro caso abbiamo inserito &#8220;NSString *strIndirizzo = @&#8221;http:\/\/www.devapp.it\/&#8221;;&#8221;. Il significato del resto del codice \u00e8 lo stesso visto poco fa per il metodo &#8220;apriPagina&#8221;.<\/p>\n<p>A questo punto il programma \u00e8 quasi terminato. Non ci resta altro, infatti, che inserire il solito metodo per la chiusura della tastiera (sempre in questo file su cui stiamo lavorando):<\/p>\n<pre lang=\"objc\" escaped=\"true\">\r\n\/\/Metodo per nascondere la tastiera\r\n-(BOOL)textFieldShouldReturn:(UITextField *)textField{ \r\n\t[textField resignFirstResponder]; \r\n\treturn YES; \r\n}\r\n<\/pre>\n<p>Torniamo quindi su Interface Builder, clicchiamo sulla UITextView, apriamo la finestra &#8220;Connections&#8221; e colleghiamo l&#8217;unico Outlets presente con File&#8217;s Owner. Salviamo e chiudiamo. Possiamo provare la nostra applicazione. Per farlo clicchiamo su &#8220;Build and Run&#8221; da Xcode. <strong>Ricordate di inserire anche &#8220;http:\/\/&#8221; negli indirizzi<\/strong> durante il test dell&#8217;applicazione, perch\u00e8 non abbiamo gestito questo aspetto. Il risultato \u00e8 quello mostrato in figura:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1.jpg\" alt=\"t008_IS\" title=\"t008_IS\" width=\"320\" height=\"480\" class=\"aligncenter size-full wp-image-836\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1.jpg 320w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2009\/11\/t008_IS1-200x300.jpg 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/files\/myBrowser.zip\" target=\"blank\">Scarica il progetto completo<\/a><br \/>\n<\/center><\/p>\n<p><center><\/p>\n<h4>Video Tutorial<\/h4>\n<p> by David Pollak<br \/>\n<\/center><\/p>\n<p><center><br \/>\n<object width=\"480\" height=\"385\"><param name=\"movie\" value=\"http:\/\/www.youtube.com\/v\/RpZ6LZb7lQA&#038;hl=it_IT&#038;fs=1&#038;\"><\/param><param name=\"allowFullScreen\" value=\"true\"><\/param><param name=\"allowscriptaccess\" value=\"always\"><\/param><embed src=\"http:\/\/www.youtube.com\/v\/RpZ6LZb7lQA&#038;hl=it_IT&#038;fs=1&#038;\" type=\"application\/x-shockwave-flash\" allowscriptaccess=\"always\" allowfullscreen=\"true\" width=\"480\" height=\"385\"><\/embed><\/object><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Oggi creeremo un semplice browser completo di tutte le funzionalit\u00e0 necessarie per la navigazione su internet. Il&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[5,4,1,23],"class_list":["post-825","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-objective-c","tag-programmazione","tag-tutorial-pratici","tag-xcode"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/825","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=825"}],"version-history":[{"count":24,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/825\/revisions"}],"predecessor-version":[{"id":2717,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/825\/revisions\/2717"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=825"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=825"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=825"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}