{"id":3901,"date":"2010-07-02T12:49:50","date_gmt":"2010-07-02T10:49:50","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=3901"},"modified":"2010-07-02T12:49:50","modified_gmt":"2010-07-02T10:49:50","slug":"t061-aggiungiamo-il-tasto-done-alla-tastiera-numerica","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t061-aggiungiamo-il-tasto-done-alla-tastiera-numerica\/","title":{"rendered":"T#061 &#8211; Aggiungiamo il tasto &#8220;DONE&#8221; alla tastiera numerica"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg\" alt=\"tutorial xcode 61 aggiungere il tasto done alla tastiera\" title=\"tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera\" width=\"97\" height=\"186\" class=\"alignleft size-full wp-image-3913\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera-156x300.jpg 156w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera-78x150.jpg 78w\" sizes=\"auto, (max-width: 97px) 100vw, 97px\" \/><\/a> Ciao Ragazzi&#8230; eccomi con un altro tutorial abbastanza particolare&#8230; Durante lo sviluppo di una mia App alcuni utenti si erano lamentati perch\u00e8 ogni volta dovevano cliccare su un bottone nella Navigation Bar per far scomparire la tastiera&#8230; Nelle tastiere numeriche, infatti, non \u00e8 presente il tasto Done, e io volevo inserirlo! Cos\u00ec, cercando un po&#8217; in rete e mettendo insieme alcuni pezzi scovati, ho composto la mia tastiera tutta nuova&#8230;<\/p>\n<p>Partiamo creando un nuovo progetto e chiamiamolo &#8220;Keyboard&#8221;. Aggiungere il tasto \u00e8 in realt\u00e0 molto semplice, mettiamo semplicemente una notifica che come oggetto ha la comparsa della tastiera. Quando la tastiera compare aggiungiamo alla vista della tastiera un bottone, che come immagine ha proprio la scritta DONE.<!--more--><\/p>\n<p>Partiamo quindi ad inserie i valori sul nostro file di intestazione .h<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n@interface keyboardViewController : UIViewController <UITextFieldDelegate>{\r\n\tIBOutlet UITextField * txt;\r\n}\r\n@end\r\n<\/pre>\n<p>Praticamente non abbiamo fatto altro che aggiungere il delegato <em>UITextFieldDelegate<\/em> e un campo di testo.<\/p>\n<p>Bene ora dobbiamo aprire il file &#8220;KeyboardViewController.xib&#8221; ed\u00a0inserire quindi un campo di testo, infine, colleghiamo i vari elementi<\/p>\n<p>Ecco come dovrebbe apparire il tutto:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-3906\" title=\"immagine 1\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1-300x187.jpg\" alt=\"\" width=\"300\" height=\"187\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1-300x187.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1-1024x640.jpg 1024w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1-150x93.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/immagine-1.jpg 1440w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Bene, \u00a0adesso facciamo in modo che la tastiera mostrata sia quella numerica, possiamo farlo sia via codice che graficamente:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\ntxt.keyboardType = UIKeyboardTypeNumberPad;\r\n<\/pre>\n<p>Fatto questo aggiungiamo le notifiche per l&#8217;aggiunta del bottone:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)viewDidLoad \r\n{\r\n    [super viewDidLoad];\r\n\ttxt.keyboardType = UIKeyboardTypeNumberPad;\r\n\r\n\tif ([[[UIDevice currentDevice] systemVersion] floatValue] &gt;= 3.2) {\r\n\t\t[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];\t\t\r\n\t} else {\r\n\t\t[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];\r\n\t}\r\n}\r\n\r\n- (void)keyboardWillShow:(NSNotification *)note \r\n{\r\n\t[self addButtonToKeyboard];\r\n\r\n}\r\n\r\n- (void)keyboardDidShow:(NSNotification *)note \r\n{\r\n\t[self addButtonToKeyboard];\r\n\r\n}\r\n<\/pre>\n<p>Nel primo <em>if<\/em> controlliamo la versione del sistema operativo e in base alla versione aggiungiamo una delle due notifiche, questo perch\u00e8 la comparsa della tastiera viene notificata da due metodi diversi :\u00a0<\/p>\n<p><em>UIKeyboardDidShowNotification<\/em> per il nuovo iOS 4 e <em>UIKeyboardWillShowNotification<\/em> per gli iOS precedenti. Quindi, in base alla notifica, faremo partire il metodo indicato&#8230; questi due non faranno altro che far partire il metodo <em>addButtonToKeyboard<\/em>, che avr\u00e0 il compito di aggiungere il tasto&#8230;<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)addButtonToKeyboard {\r\n\t\/\/ create custom button\r\n\tUIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];\r\n\tdoneButton.frame = CGRectMake(0, 163, 106, 53);\r\n\tdoneButton.adjustsImageWhenHighlighted = NO;\r\n\tif ([[[UIDevice currentDevice] systemVersion] floatValue] &gt;= 3.0) \r\n\t{\r\n\t\t[doneButton setImage:[UIImage imageNamed:@\"DoneUp3.png\"] forState:UIControlStateNormal];\r\n\t\t[doneButton setImage:[UIImage imageNamed:@\"DoneDown3.png\"] forState:UIControlStateHighlighted];\r\n\t} else \r\n\t{        \r\n\t\t[doneButton setImage:[UIImage imageNamed:@\"DoneUp.png\"] forState:UIControlStateNormal];\r\n\t\t[doneButton setImage:[UIImage imageNamed:@\"DoneDown.png\"] forState:UIControlStateHighlighted];\r\n\t}\r\n\t[doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];\r\n\t\/\/ locate keyboard view\r\n\tUIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];\r\n\r\n\tUIView* keyboard;\r\n\t\/\/NSLog(@\"%@\", keyboard);\r\n\tfor(int i=0; i&lt;[tempWindow.subviews count]; i++) {\r\n\t\tkeyboard = [tempWindow.subviews objectAtIndex:i];\r\n\t\t\/\/ keyboard found, add the button\r\n\t\tif ([[[UIDevice currentDevice] systemVersion] floatValue] &gt;= 3.2) {\r\n\t\t\tif([[keyboard description] hasPrefix:@\"&lt;UIPeripheralHost\"] == YES)\r\n\t\t\t\t[keyboard addSubview:doneButton];\r\n\t\t} else {\r\n\t\t\tif([[keyboard description] hasPrefix:@\"&lt;UIKeyboard\"] == YES)\r\n\t\t\t\t[keyboard addSubview:doneButton];\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>Questo \u00e8 il metodo fondamentale&#8230; dalla riga 22 alla 34 creiamo il nostro bottone, (con iOS 4 \u00e8 stata modificata anche la tastiera, abbiamo quindi delle immagini diverse a seconda del sistema operativo) e gli aggiungiamo il metodo <em>doneButton<\/em> per poi togliere la tastiera.<\/p>\n<p>Dalla 36 alla 50 prendetele un po&#8217; come un Must, il compito di questo pezzo \u00e8 quello di trovare la vista della tastiera, e se la descrizione della tastiera ritorna una stringa tipo: <strong>@&#8221;<UIPeripheralHost\"<\/strong> per iOS4 o <strong>@&#8221;<UIKeyboard\"<\/strong> per le versioni precedenti, quando trova la vista giusta gli aggiunge il bottone.<\/p>\n<p>Bene, ora non ci resta che aggiungere il metodo <em>doneButton<\/em> per far scomparire la tastiera:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (void)doneButton:(id)sender {\r\n    [textField resignFirstResponder];\r\n}\r\n<\/pre>\n<p>Finito!!<\/p>\n<p>Vi allego il progetto cosi potete scaricare le immagini per il bottone.<\/p>\n<p>Sper\u00f2 di esservi stato utile!! \ud83d\ude42<\/p>\n<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/keyboard.zip\" target=\"_blank\">keyboard<\/a><\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg\" alt=\"tutorial xcode 61 aggiungere il tasto done alla tastiera\" title=\"tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera\" width=\"386\" height=\"742\" class=\"aligncenter size-full wp-image-3913\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera-156x300.jpg 156w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/07\/tutorial-xcode-61-aggiungere-il-tasto-done-alla-tastiera-78x150.jpg 78w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><br \/>\n<\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ciao Ragazzi&#8230; eccomi con un altro tutorial abbastanza particolare&#8230; Durante lo sviluppo di una mia App alcuni&#8230;<\/p>\n","protected":false},"author":136,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[298,270,296,297,272],"class_list":["post-3901","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-addbuttontokeyboard","tag-andrea-cappellotto","tag-uikeyboarddidshownotification","tag-uikeyboardwillshownotification","tag-uitextfielddelegate"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3901","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\/136"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=3901"}],"version-history":[{"count":14,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3901\/revisions"}],"predecessor-version":[{"id":3912,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/3901\/revisions\/3912"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=3901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=3901"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=3901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}