Posso limitar o conjunto de caracteres para um UITextField?
-
16-09-2019 - |
Pergunta
Eu tenho uma fonte bitmap que que não tem cada personagem, como caracteres acentuados (e I u etc) ou símbolos, tais como "¥" ou © que eu estou usando para nomes de usuário de exibição em uma tabela de recordes para um jogo.
É possível limitar o teclado UIKit para determinados caracteres, ou permitir apenas determinados caracteres no UITextField? Ou será que eu tenho que fazer a minha própria mecanismo de entrada? Estou pensando e old school, estilo Arcade, uma letra de cada "coisa" tempo seria ok.
Solução
Você pode tentar usar o método a seguir UITextFieldDelegate:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string;
Outras dicas
Usando o método UITextFieldDelegate mencionado por intregus, você pode fazer isso muito 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];
}
tente usar o UIKeyboardTypeNamePhonePad
para o seu UITextField
. Ela tem apenas letras e números sobre ele:
textField.keyboardType = UIKeyboardTypeNamePhonePad;
Usando o Interface Builder você pode ligar e obter o evento para "Edição mudou" em qualquer de sua função. Agora lá você pode colocar cheque para o comprimento
- (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;
}
}