2

我正在创建一个文本字段。

但是文本字段应该只包含字母而不包含数字。如何在不检查 ASCII 值的情况下在 ios 中执行此操作?

4

4 回答 4

2
- (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;
}
于 2013-09-02T12:15:56.610 回答
1

以上所有答案都告诉我们如何只允许字母,如果用户按 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;

}
于 2016-01-14T19:45:12.087 回答
0

您需要使用委托方法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); 

}
于 2013-09-02T12:16:30.207 回答
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;
    }
}
于 2014-12-18T13:44:37.273 回答