2009-12-22 12 views
10

Como una forma de validación, ¿hay alguna forma de evitar que se desestime una vista de alerta al presionar un botón "Aceptar"?impide que UIAlertView descarte

Escenario: Tengo 2 campos de texto en la vista de alerta para nombre de usuario/contraseña. Si ambos están vacíos y el usuario presiona "OK", no deseo que se descarte la alerta.

+0

Al igual que el widget de contraseña de iTunes? ¿Apple usa UIAlertView para esto? –

Respuesta

0

No creo que tenga que pasar ningún nombre de botón. Solo saca tu cadena de botones OK y déjala como "nula".

9

Lo está haciendo de la manera incorrecta, debe habilitar y deshabilitar el botón de enviar según la entrada. Primero debes tener acceso al botón. Esto es fácil, basta con crear la alerta y sin botones, crear un botón independiente y añadirlo al cuadro de diálogo:

[alert addButtonWithTitle:@"OK"]; 
UIButton *submitButton = [[alert subviews] lastObject]; 
[submitButton setEnabled:…]; 

Y entonces usted tiene que fijar un delegado para los campos de texto y activar o desactivar el botón cuando cambian los campos :

- (BOOL) textField: (UITextField*) textField 
    shouldChangeCharactersInRange: (NSRange) range 
    replacementString: (NSString*) string 
{ 
    int textLength = [textField.text length]; 
    int replacementLength = [string length]; 
    BOOL hasCharacters = (replacementLength > 0) || (textLength > 1); 
    [self setButtonsAreEnabled:hasCharacters]; 
} 

// Disable the ‘Return’ key on keyboard. 
- (BOOL) textFieldShouldReturn: (UITextField*) textField 
{ 
    return NO; 
} 

por supuesto que debe envolver todo esto en una clase separada para que no se metan su código de llamada.