Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

prevent UIAlertView from dismissing

As a form of validation, is there any way to prevent an alert view from dismissing when pressing an "OK" button?

Scenario: I have 2 text fields in the alertview for username/password. If both are empty and the user presses "OK", I do not want the alert to be dismissed.

like image 222
rson Avatar asked Dec 22 '09 17:12

rson


2 Answers

iOS 5 introduces a new property to UIAlertView to handle exactly this problem.

alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput;

Apple documentation on UIAlertView.

Add the new UIAlertViewDelegate method to handle the enabling/disabling of the button.

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView

Apple documentation on UIAlertViewDelegate.

like image 147
Joony Avatar answered Nov 15 '22 18:11

Joony


You’re doing it the wrong way, you should enable and disable the submit button according to the input. First you have to get access to the button. This is easy, just create the alert without buttons, create a standalone button and add it to the dialog:

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

And then you have to set a delegate for those textfields and enable or disable the button when the fields change:

- (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;
}

Of course you should wrap all this into a separate class so that you don’t mess up your calling code.

like image 39
zoul Avatar answered Nov 15 '22 17:11

zoul