• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#061 – Aggiungiamo il tasto “DONE” alla tastiera numerica

By Andrea Cappellotto | on 2 Luglio 2010 | 14 Comments
Senza categoria

tutorial xcode 61 aggiungere il tasto done alla tastiera Ciao Ragazzi… eccomi con un altro tutorial abbastanza particolare… Durante lo sviluppo di una mia App alcuni utenti si erano lamentati perchè ogni volta dovevano cliccare su un bottone nella Navigation Bar per far scomparire la tastiera… Nelle tastiere numeriche, infatti, non è presente il tasto Done, e io volevo inserirlo! Così, cercando un po’ in rete e mettendo insieme alcuni pezzi scovati, ho composto la mia tastiera tutta nuova…

Partiamo creando un nuovo progetto e chiamiamolo “Keyboard”. Aggiungere il tasto è in realtà 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.

Partiamo quindi ad inserie i valori sul nostro file di intestazione .h

@interface keyboardViewController : UIViewController {
	IBOutlet UITextField * txt;
}
@end

Praticamente non abbiamo fatto altro che aggiungere il delegato UITextFieldDelegate e un campo di testo.

Bene ora dobbiamo aprire il file “KeyboardViewController.xib” ed inserire quindi un campo di testo, infine, colleghiamo i vari elementi

Ecco come dovrebbe apparire il tutto:



Bene,  adesso facciamo in modo che la tastiera mostrata sia quella numerica, possiamo farlo sia via codice che graficamente:

txt.keyboardType = UIKeyboardTypeNumberPad;

Fatto questo aggiungiamo le notifiche per l’aggiunta del bottone:

- (void)viewDidLoad 
{
    [super viewDidLoad];
	txt.keyboardType = UIKeyboardTypeNumberPad;

	if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];		
	} else {
		[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
	}
}

- (void)keyboardWillShow:(NSNotification *)note 
{
	[self addButtonToKeyboard];

}

- (void)keyboardDidShow:(NSNotification *)note 
{
	[self addButtonToKeyboard];

}

Nel primo if controlliamo la versione del sistema operativo e in base alla versione aggiungiamo una delle due notifiche, questo perchè la comparsa della tastiera viene notificata da due metodi diversi : 

UIKeyboardDidShowNotification per il nuovo iOS 4 e UIKeyboardWillShowNotification per gli iOS precedenti. Quindi, in base alla notifica, faremo partire il metodo indicato… questi due non faranno altro che far partire il metodo addButtonToKeyboard, che avrà il compito di aggiungere il tasto…

- (void)addButtonToKeyboard {
	// create custom button
	UIButton *doneButton = [UIButton buttonWithType:UIButtonTypeCustom];
	doneButton.frame = CGRectMake(0, 163, 106, 53);
	doneButton.adjustsImageWhenHighlighted = NO;
	if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.0) 
	{
		[doneButton setImage:[UIImage imageNamed:@"DoneUp3.png"] forState:UIControlStateNormal];
		[doneButton setImage:[UIImage imageNamed:@"DoneDown3.png"] forState:UIControlStateHighlighted];
	} else 
	{        
		[doneButton setImage:[UIImage imageNamed:@"DoneUp.png"] forState:UIControlStateNormal];
		[doneButton setImage:[UIImage imageNamed:@"DoneDown.png"] forState:UIControlStateHighlighted];
	}
	[doneButton addTarget:self action:@selector(doneButton:) forControlEvents:UIControlEventTouchUpInside];
	// locate keyboard view
	UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];

	UIView* keyboard;
	//NSLog(@"%@", keyboard);
	for(int i=0; i<[tempWindow.subviews count]; i++) {
		keyboard = [tempWindow.subviews objectAtIndex:i];
		// keyboard found, add the button
		if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 3.2) {
			if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
				[keyboard addSubview:doneButton];
		} else {
			if([[keyboard description] hasPrefix:@"<UIKeyboard"] == YES)
				[keyboard addSubview:doneButton];
		}
	}
}

Questo è il metodo fondamentale… dalla riga 22 alla 34 creiamo il nostro bottone, (con iOS 4 è stata modificata anche la tastiera, abbiamo quindi delle immagini diverse a seconda del sistema operativo) e gli aggiungiamo il metodo doneButton per poi togliere la tastiera.

Dalla 36 alla 50 prendetele un po’ come un Must, il compito di questo pezzo è quello di trovare la vista della tastiera, e se la descrizione della tastiera ritorna una stringa tipo: @” per iOS4 o @” per le versioni precedenti, quando trova la vista giusta gli aggiunge il bottone.

Bene, ora non ci resta che aggiungere il metodo doneButton per far scomparire la tastiera:

- (void)doneButton:(id)sender {
    [textField resignFirstResponder];
}

Finito!!

Vi allego il progetto cosi potete scaricare le immagini per il bottone.

Sperò di esservi stato utile!! 🙂

keyboard


tutorial xcode 61 aggiungere il tasto done alla tastiera

Share this story:
  • tweet

Tags: addButtonToKeyboardAndrea CappellottoTutorial PraticiUIKeyboardDidShowNotificationUIKeyboardWillShowNotificationUITextFieldDelegate

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • T#100 – Integrare Dropbox nelle applicazioni iPhone ed iPad

    9 Settembre 2011 - 11 Comments
  • T#099 – Scopriamo la property TAG e impariamo ad usarla durante lo sviluppo di Applicazioni iOS

    1 Agosto 2011 - 4 Comments
  • Unisciti al nostro team di sviluppo per creare oggetti da rilasciare sotto licenza open

    17 Luglio 2011 - 2 Comments

Author Description

Perito Elettrotecnico e studente di Scienze Informatiche presso l'università di Trento. Da inizio 2010 , dopo aver lavorato come sistemista-tecnico informatico, si occupa di programmazione in ambito iOS, collabora con un'azienda trentina nello sviluppo di applicazioni iOS per il turismo e realizza soluzioni personalizzate per aziende. Tra gli ultimi progetti ricordiamo l'integrazione tra iOS e Arduino segno che l'open source può benissimo lavorare con sistemi più chiusi come i device Apple! Per devAPP scrive tutorial sulla programmazione, da cosigli su strumenti da utilizzare per semplificare la programmazione, è inoltre moderatore del forum con all'attivo quasi mille post e partecipazioni giornaliere.

14 Responses to “T#061 – Aggiungiamo il tasto “DONE” alla tastiera numerica”

  1. 2 Luglio 2010

    Il Profeta

    Piccola domanda… Ma la apple potrebbe accettare una applicazione con questo tipo di “tastiera CUSTOM”????

    Oppure verrebbe rifiutata?!

  2. 2 Luglio 2010

    andreaAppCode

    La mia applicazione usa questo tipo di tastiera, ed è sempre stata accettata.. se ci pensi anche loro lo fanno, con la tastiera del telefono…. Non verrà rifiutata….

  3. 2 Luglio 2010

    Lele

    Molto utile grazie, volevo fare una domanda…sarebbe possibile intercettare un doppio tap sullo schermo per la chiusura della tastiera oltre al bottone “done” ?

  4. 2 Luglio 2010

    andreaAppCode

    mhhh…. penso di si… ma dipenderebbe che oggetti hai nella tua vista, ogni oggetto reagisce diversamente ad un tocco, dipende dai delegati…. non so… sarebbe interessante approfondire…..:)

  5. 3 Luglio 2010

    Fili

    Sarebbe possibile sostituire al tasto done un tasto ad esempio punto (.) da utilizzare ad esempio in applicazioni “matematiche” che richiedono l’inserimento di valori nuemerici con la virgola?

  6. 4 Luglio 2010

    andreaAppCode

    certo… possiamo inserire qualunque tasto e fargli fare qualsiasi azione…

  7. 4 Luglio 2010

    Gino

    Veramente utile come tutorial, testato subito in una mia app dove mi serviva… ottimo!!!

    grazie

  8. 4 Luglio 2010

    andreaAppCode

    grazie mille, fra un po vedremo anche come inserire una navigation bar sopra la tastiera stile Safari….

  9. 3 Agosto 2010

    xTuMiOx

    bello, funziona ma non nel caso in cui ci siano più text in cui si necessita l’uso di tastiere diverse, infatti se ad esempio in un altro textField uso la tastiera di default mi apparirà lo stesso il pulsante done… e la cosa non è bellissima..

  10. 3 Agosto 2010

    andreaAppCode

    beh, basta usare il metodo ActiveField in cui imposti il txt in cui si trova il cursore, e nel metodo addButton controlli, se il txtCorrente usa la tastiera numerica allora lo fai comparire… è molto semplice…

  11. 19 Settembre 2010

    ga


    Fili:

    Sarebbe possibile sostituire al tasto done un tasto ad esempio punto (.) da utilizzare ad esempio in applicazioni “matematiche” che richiedono l’inserimento di valori nuemerici con la virgola?

    http://stackoverflow.com/questions/3742642/how-to-use-the-new-uikeyboardtypedecimalpad-feature-in-ios-4-1-sdk

    ;D

  12. 2 Dicembre 2010

    rufy

    ho una domanda: ma se volessi creare una tastiera personalizzata? come potrei fare?

  13. 17 Marzo 2011

    Matte


    andreaAppCode:

    beh, basta usare il metodo ActiveField in cui imposti il txt in cui si trova il cursore, e nel metodo addButton controlli, se il txtCorrente usa la tastiera numerica allora lo fai comparire… è molto semplice…

    ciao,visto che sono proprio inesperto di queste cose..e mi ritrovo il tasto done su tutte le tastiere che compaiono nei vari uitab, potresti spiegare meglio come far comparire il tasto done per un certo uitextfield? grazie!!

  14. 14 Aprile 2012

    geminimac

    ciao,
    testato e funzionante con singola vista…
    quando però la app possiede due viste il Done si incanta e non funziona più…
    come si potrebbe correggere il problema?

    grazie

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO