XCode Tips&Tricks #7 – Inserire una UITextFiel in una UIViewAlert

Solo qualche giorno fa vi avevamo spiegato come inserire più bottoni in una UIAlertView.

Subito dopo ho ricevuto via Twitter una richiesta da “Luigix95“, che mi chiedeva come inserire una UITextField all’interno di un UIViewAlert, in modo da permettere all’utente di inserire del testo (in pratica un comportamente simile a quello che avviene quando scaricate un’applicazione e AppStore vi richiede la password).

Ecco, quindi, il procedimento da seguire.

Nel file “.h” della vostra classe inserite la dichiarazione di una UITextField, eccovi un esempio:

@interface provaAlertViewController : UIViewController <UIAlertViewDelegate, UITextFieldDelegate> {
  UITextField *textField;
}

@end

Come vedete abbiamo definito una text field (riga 2). Ricordatevi, inoltre, di inserire i due delegati “UIAlertViewDelegate” e “UItextFieldDelegate”, che ci permetteranno di interagire con la UIAlertView e con la UITextField.

Nel file “.m” definiamo (dove vi serve) una UIAlertView, e inseriamo anche la text field appena definita:

 UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Inserisci il tuo nome" message:@" " delegate:self cancelButtonTitle:@"Annulla" otherButtonTitles:@"OK", nil];
 // definiamo e inseriamo la TextField
 textField = [[UITextField alloc] initWithFrame:CGRectMake(20.0, 45.0, 245.0, 25.0)];
 textField.delegate = self;
 [textField setBackgroundColor:[UIColor whiteColor]];
 [alertView addSubview:textField];
 // lo spostiamo un po' in alto, altrimenti viene nascosto dalla tastiera
 CGAffineTransform alza = CGAffineTransformMakeTranslation(0.0, 100.0);
 [alertView setTransform:alza];
 // mostriamo l'alert view
 [alertView show];
 [alertView release];

Come potete vedere, alla riga 3 abbiamo istanziato una UITextField con delle dimensioni che possano stare nell’UIAlertView. Settiamo, poi, il delegato (riga 4, che vedremo fra poco a cosa servirà), il colore (riga 5) e la inseriamo poi nell’alert (riga 6).

Alla riga 8 definiamo una trasformazione, che sposterà verso l’alto la nostra UIAlertView, in modo che essa non venga coperta dalla tastiera che apparirà per scrivere nella text field.

Ci mancano solo due semplici metodi da inserire, due metodi appartenenti ai delegati che abbiamo definito nell’intestazione della classe. Eccoli:

- (void)alertView:(UIAlertView *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
 // l'utente ha selezionato si, quindi vuole azzerare i punteggi
 if (buttonIndex == 1) {
 NSString *textValue = textField.text;
 NSLog(@"testo: %@",textValue);
 }
}

- (BOOL)textFieldShouldReturn:(UITextField *)textField{
 [textField resignFirstResponder];
 return YES;
}

Il primo metodo ci permette di capire il bottone che è stato premuto (nel nostro caso controlliamo che sia stato premuto “Ok”), e ricaviamo il testo inserito, stampandolo semplicemente nella console di debug.

Il secondo metodo, invece, lo avrete già visto più volte, e permette alla tastiera di chiudersi quando si clicca su “Return” (o “Done”) della tastiera.

Spero di avervi mostrato qualcosa che vi possa tornare utile, se avete richieste scrivetemi utilizzando questo form oppure direttamente su Twitter! Alla prossima!

Ingegnere informatico e sviluppatore freelance, mi occupo da anni di sviluppo per iOS (ma non solo). Dal 2008 scrivo su questo piccolo blog (con qualche lunga pausa), in cui parlo di programmazione e di qualsiasi altra cosa che mi diverta.

3 comments On XCode Tips&Tricks #7 – Inserire una UITextFiel in una UIViewAlert

  • ottimo tutorial! solo una domanda! qual’è il parametro per settare la dimensione dell alert? Grazie 🙂

  • una soluzione che ho trovato, è aumentare a dismisura il campo messagge ma non è molto elegante XD

  • @Fabry: ho cercato un po’ ma non ho trovato niente di buono.. forse bisogna utilizzare un frame personalizzato, ma non so di preciso come fare.. ho trovato, in compenso, un bell’esempio, che vedrai in un prossimo “XCode Tips&Tricks” 😉

Leave a Reply to Fabry Cancel Reply

Your email address will not be published.

Site Footer