Posso limitare il set di caratteri per un UITextField?
-
16-09-2019 - |
Domanda
Ho un carattere bitmap, che che non ha ogni singolo carattere, come ad esempio le lettere accentate (é I U ecc) o simboli come "¥" o ©, che sto usando per visualizzare i nomi utente in una tabella Classifica per un gioco.
E 'possibile limitare la tastiera UIKit a certi personaggi, o consentire solo alcuni caratteri nel UITextField? Oppure dovrò rotolare il mio meccanismo di input? Sto pensando e vecchia scuola, in stile arcade, una lettera alla "cosa" il tempo sarebbe stato ok.
Soluzione
Si potrebbe provare a utilizzare il seguente metodo UITextFieldDelegate:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
Altri suggerimenti
Utilizzando il metodo UITextFieldDelegate citato da intregus, si può fare questo abbastanza facilmente:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
// Only characters in the NSCharacterSet you choose will insertable.
NSCharacterSet *invalidCharSet = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefgABCDEFG"] invertedSet];
NSString *filtered = [[string componentsSeparatedByCharactersInSet:invalidCharSet] componentsJoinedByString:@""];
return [string isEqualToString:filtered];
}
provare a utilizzare il UIKeyboardTypeNamePhonePad
per il vostro UITextField
. Ha solo lettere e numeri su di esso:
textField.keyboardType = UIKeyboardTypeNamePhonePad;
Utilizzando Interface Builder è possibile collegare e ottenere l'evento per "Editing cambiato" in una qualsiasi delle vostra funzione. Ora ci si può mettere di controllo per la lunghezza
- (IBAction)onValueChange:(id)sender
{
NSString *text = nil;
int MAX_LENGTH = 20;
switch ([sender tag] )
{
case 1:
{
text = myEditField.text;
if (MAX_LENGTH < [text length]) {
myEditField.text = [text substringToIndex:MAX_LENGTH];
}
}
break;
default:
break;
}
}