2009-12-22 14 views
10

Come forma di convalida, esiste un modo per impedire che una visualizzazione di avviso venga ignorata quando si preme un pulsante "OK"?impedisce UIAlertView di ignorare

Scenario: Ho 2 campi di testo nella visualizzazione dell'avviso per nome utente/password. Se entrambi sono vuoti e l'utente preme "OK", non voglio che l'avviso venga ignorato.

+0

Come il widget iTunes password? Apple usa UIAlertView per questo? –

risposta

0

Non credo che sia effettivamente necessario passare in alcun nome di pulsante. Basta estrarre la stringa del pulsante OK e lasciarla come "nulla".

9

Lo stai facendo nel modo sbagliato, dovresti abilitare e disabilitare il pulsante di invio in base all'input. Per prima cosa devi accedere al pulsante. Questo è facile, basta creare l'avviso senza tasti, creare un pulsante stand-alone e aggiungerlo alla finestra di dialogo:

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

E poi si deve impostare un delegato per i campi di testo e attivare o disattivare il pulsante quando i campi cambiano :

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

Ovviamente dovresti inserire tutto questo in una classe separata in modo da non rovinare il codice di chiamata.

12

iOS 5 introduce una nuova proprietà in UIAlertView per gestire esattamente questo problema.

alert.alertViewStyle = UIAlertViewStyleLoginAndPasswordInput; 

Apple documentation on UIAlertView.

Aggiungere il nuovo metodo UIAlertViewDelegate per gestire l'abilitazione/disabilitazione del pulsante.

- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView 

Apple documentation on UIAlertViewDelegate.