Ciao ragazzi, un po’ di tempo fa vi ho fatto vedere come inserire il tasto “done” sulla tastiera numerica, oggi, invece, vedremo come inserire una NavigationBar stile “Safari” sulla nostra tastiera.
Iniziamo naturalmente con un nuovo progetto di tipo view-based e chiamiamolo “KeyTab”. Bene, apriamo il KeyTabViewController.xib e inseriamo un campo di testo.
Passiamo quindi al file di interfaccia KeyTabViewController.h e inseriamo un IBOutlet UITextField :
@interface keyTab2ViewController : UIViewController {
IBOutlet UITextField * txt;
}
@end
Aggiungiamo anche il delegato del textField. Torniamo al nostro file .xib e colleghiamo il File’s Owner con il campo di testo, e il delegato con il campo di testo. (clicchiamo sul file’s owner tenendo premuto control e colleghiamo le parti).

Passiamo ora all’implementazione dei metodi. Nel viewDidLoad inseriamo la notifica di quando compare la tastiera:
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
}
Notate che questa volta non abbiamo fatto alcuna differenza per iOS 4 o precedenti, in quanto il procedimento è lo stesso del precedente tutorial.
Bene, ora aggiungiamo il metodo per far tornare la tastiera:
-(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Passiamo ora al vero e proprio pezzo fondamentale, l’inserimento della barra:
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary *info = [aNotification userInfo];
NSValue *keyBounds = [info objectForKey:UIKeyboardBoundsUserInfoKey];
CGRect bndKey;
[keyBounds getValue:&bndKey];
UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -40, bndKey.size.width, 40)];
//[toolbar setTranslucent:YES];
UIColor * black = [[UIColor alloc] initWithRed:0 green:0 blue:0 alpha:1.0];
[toolbar setTintColor:black];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Bottone 1" style:UIBarButtonItemStyleBordered target:self action:@selector(buttonClicked:)];
NSArray *items = [[NSArray alloc] initWithObjects:barButtonItem, nil];
[toolbar setItems:items];
[items release];
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];
UIView* keyboard;
for(int i = 0; i < [tempWindow.subviews count]; i++)
{
//Get a reference of the current view
keyboard = [tempWindow.subviews objectAtIndex:i];
//Check to see if the description of the view we have referenced is "UIKeyboard" if so then we found
//the keyboard view that we were looking for
if([[keyboard description] hasPrefix:@"<UIPeripheralHost"] == YES)
{
[keyboard addSubview:toolbar];
}
}
}
Alla riga 7 creiamo la nostra UIToolBar, le dimensioni sono state calcolate perfettamente, gli diamo un colore (in questo caso nero). Creiamo poi un bottone, ne possiamo inserire quanti ne vogliamo, e gli diamo come azione il metodo buttonClicked. Nelle prossime due righe non facciamo altro che creare un array, inserirci dentro il bottone e aggiungere il contenuto dell’array nella barra. In questo caso i bottoni (se ne create più di uno) vi verranno messi tutti in fila, partendo da sinistra. altrimenti potete creare dei bottoni tramite delle viste personalizzate e allora li potete posizionare ovunque.
La parte che segue poi è sempre la stessa, andiamo alla ricerca della vista della tastiera, una volta trovata gli aggiungiamo la barra.
L’ultima cosa che ci resta da fare è quella di creare il metodo che viene chiamato quando clicchiamo sul bottone:
- (void)buttonClicked:(NSNotification *)note
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"CLICK!!!" message:@"Hai cliccato il bottone sulla tastiera!!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
;
;
}
Ecco qui, quando si clicca su bottone compare un alertView. Spero che i miei brevi tutorial vi siano utili, se volete potete scaricare il progetto da qui:
Progetto KeyTab
Eccovi uno screenshot del tutorial in esecuzione:










9 Responses to “T#063 – Inseriamo una navigation bar sulla tastiera stile safari”
19 Luglio 2010
FraBel tutorial 😀 Ma se io per esempio nella tastiera metto il bottone blu “Cerca” e una volta cliccato si avvia un’azione. Come si fà?
19 Luglio 2010
andreaAppCodebeh è la stessa cosa fatta qui, tu crei il bottone e gli setti come evento l’azione, poi lo aggiungi alla toolbar e il gioco è fatto:)
19 Luglio 2010
FrancescoA andreaAppCode No io intendo senza Toolbar. Al posto di return o invio ci metto il bottone Cerca e quando clicco su esso si avvia un’azione
19 Luglio 2010
andreaAppCodeahhh ho capito… intendi la tastiera k compare quando cerchi su google…sinceramente nn ci ho mai pensato…. provo a vedere se trovo qualcosa…
20 Luglio 2010
MatteotextField.returnKey dovrebbe essere il metodo per scegliere quale pulsante di “ritorno” impostare… mettendo il default viene invio, mettendo send viene invia (per la posta elettronica mi pare) mettendo search si imposta la ricerca..
textField.returnKeyType = UIReturnKeySearch
dovrebbe essere quello che interessa a te ma non mi ricordo esattamente se è questa la scrittura corretta… perdonami ma vado a memoria..
20 Luglio 2010
andresi, il problema non è quello di cambiare il tasto, ma di come assegnare un metodo al tasto cerca…. Nel senso che quando imposti il tasto done l’evento alla pressione del tasto è quello di far tornare la tastiera.. ma nel caso del tasto cerca?? probabilmente si basa sul metodo di ricerca per le tabelle… provo a guardare..:)
21 Dicembre 2010
Gabrytutorial fantastico! ma la toolbar compare sulle tastiere quando scrivo un sms, una mail o una nota? se no, come posso fare ciò?
2 Marzo 2012
AdriatikPer farlo basta settare il delegato della UITextField ed implementare il seguente metodo:
- (BOOL)textFieldShouldReturn:(UITextField *)textField;26 Maggio 2012
giovannicome faccio per far uscire la toolbar solo su una UIView? nelle altre non mi serve la toolbar…