2010-04-25 4 views
1

J'ai besoin utilisateur d'entrer des données comme DF-DJSL donc je mets cela dans le code:UIKeyboard tourner le verrouillage des majuscules

theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters; 

Mais malheureusement ce qui se passe est le premier type de lettre en majuscules mais lettre immédiatement après avoir tapé le trait d'union sera en minuscule et le reste retournera à CAPS produisant ainsi une sortie comme celle-ci (sauf si l'utilisateur tape manuellement le bouton shift après avoir tapé un trait d'union): DF-dJSL

Comment puis-je résoudre ce problème?

Merci beaucoup

Répondre

6

Vous ne mentionnez pas le SDK que vous utilisez, mais contre 3.0 et au-dessus, je vois votre comportement souhaité.

Cela dit, vous pouvez toujours modifier le texte en majuscules quand ils ont fini de l'édition de la textFieldDidEndEditing méthode du délégué:

- (void)textFieldDidEndEditing:(UITextField *)textField { 
    NSString *textToUpper = [textField.text uppercaseString]; 
    [theTextField setText:textToUpper]; 
} 

Ou, en mettant en place une notification sur le champ de texte lorsqu'il change , vous pouvez modifier le texte tel qu'il est tapé:

// setup the UITextField 
{ 
    theTextField.delegate = self; 
    theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters; 
    [theTextField addTarget:self action:@selector(textFieldDidChange:) forControlEvents:UIControlEventEditingChanged]; 
} 

vous devez le faire de cette façon puisque, contrairement UISearchBar, UITextField n'implémente pas textDidChange. Quelque chose comme ça, peut-être?

- (void)textFieldDidChange:(UITextField *)textField { 
    NSRange range = [textField.text rangeOfString : @"-"]; 
    if (range.location != NSNotFound) { 
     theTextField.autocapitalizationType = UITextAutocapitalizationTypeAllCharacters; 
    } 
} 
Questions connexes