2012-01-24 16 views
14

Estoy usando una de las nuevas características de iOS 5 para un UIAlertView. Creo un UIAlertView así:UIAlertViewStylePlainTextInput clave de devolución delegar

UIAlertView *scanCode = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Some Title", @"") message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:NSLocalizedString(@"OK", @""), nil]; 
     [scanCode setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
     scanCode.tag = 1234; 
     [scanCode show]; 
     [scanCode release]; 

El delegado que uso ahora es:

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { 
    if (alertView.tag == 1234) { 
     if (buttonIndex == 1) 
     { 
      //do something 
      } 
     } 
    } 
} 

Ahora quiero para simular la tecla Intro, de modo que cuando el usuario selecciona el retorno sobre el teclado que lo mismo sucede al presionar el botón OK de la alerta. ¿Cómo puedo hacer esto?

¡Gracias de antemano!

Respuesta

29

Asegúrese de que su clase cumpla con el protocolo <UITextFieldDelegate>, hacer que el UIAlertView una propiedad para su clase y añadir la siguiente línea a su código de configuración ...

self.scanCode = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Some Title", @"") message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:NSLocalizedString(@"OK", @""), nil]; 
[self.scanCode setAlertViewStyle:UIAlertViewStylePlainTextInput]; 
self.scanCode.tag = 1234; 
//add this... 
[[self.scanCode textFieldAtIndex:0] setDelegate:self]; 
[self.scanCode show]; 

Al convertirse el delegado para el campo de entrada de texto puede averiguar cuándo se presiona la tecla de retorno en el teclado. A continuación, en el archivo .m para su clase que implemente el método delegado de abajo y le dice al alerta a desaparecer:

-(BOOL)textFieldShouldReturn:(UITextField *)textField{ 
    [self.scanCode dismissWithClickedButtonIndex:self.scanCode.firstOtherButtonIndex animated:YES]; 
    return YES; 
} 
+2

Gracias ... Programación 15 horas al día realmente hacer cosas obvias olvidado ;-) – CyberK

+0

@jackslash Puede usted descartar el padre 'UIAlertView' en el método' textFieldShouldReturn: 'si el' UIAlertView' no es una propiedad? (¿Además de subir la jerarquía de la supervista?) – zekel

+0

@jackslash Además, debe usar 'self.scanCode.firstOtherButtonIndex' en lugar de' 0'. Y asegúrese de que la propiedad 'UIAlertView' sea una referencia débil, de lo contrario estará en la memoria después de que desaparezca. – zekel

Cuestiones relacionadas