我正在创建一个文本字段。
但是文本字段应该只包含字母而不包含数字。如何在不检查 ASCII 值的情况下在 ios 中执行此操作?
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
BOOL canEdit=NO;
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"];
for (int i = 0; i < [string length]; i++)
{
unichar c = [string characterAtIndex:i];
if (![myCharSet characterIsMember:c])
{
canEdit=NO;
}
else
{
canEdit=YES;
}
}
return canEdit;
}
以上所有答案都告诉我们如何只允许字母,如果用户按 BackSpace 怎么办?
这是我的解决方案:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
NSLog(@"Backspace was pressed");
return YES;
}
BOOL canEdit=NO;
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz or all Character set you like!!!"];
for (int i = 0; i < [string length]; i++)
{
unichar c = [string characterAtIndex:i];
if (![myCharSet characterIsMember:c])
{
canEdit=NO;
}
else
{
canEdit=YES;
}
}
return canEdit;
}
您需要使用委托方法shouldChangeTextInRange
- 每次文本更改时系统都会自动调用它。在这种方法中,您需要像这样检查 textField 中的输入。
为了调用此方法,您需要在您的类 .h 文件(即@interface MyClass : UIViewController <UITextFieldDelegate>
)中声明您的类实现了协议,并将文本字段的委托设置为您的类的实例。
-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSCharacterSet *nonNumberSet = [[NSCharacterSet characterSetWithCharactersInString:@"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"] invertedSet];
NSString *trimmedReplacement =
[[ text componentsSeparatedByCharactersInSet:nonNumberSet]
componentsJoinedByString:@""];
return ([text stringByTrimmingCharactersInSet:nonNumberSet].length > 0);
}
我最初从这个问题的一个答案中得到了代码,但是在不允许退格和空格时修改了它。下面的代码块只允许使用字母、空格和退格。默认 ios 键盘中的数字和特殊字符将被忽略。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
if ([string isEqualToString:@""]) {
NSString *originalString = textField.text;
NSInteger newLength = [textField.text length];
if (originalString.length > newLength)
myTextfield.text = [originalString substringToIndex:newLength];
return YES;
}
else{
BOOL canEdit=NO;
NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString:@"1234567890-/:;()&@\".,?!'[]{}#%^*+=_\\|~<>$£₹€•"];
for (int i = 0; i < [string length]; i++)
{
unichar c = [string characterAtIndex:i];
if ([myCharSet characterIsMember:c])
{
canEdit=NO;
}
else
{
canEdit=YES;
}
}
return canEdit;
}
}