强制UITextField将第一个字符作为数字,第二个作为字母数字

时间:2014-05-20 15:25:56

标签: ios objective-c

我试图找到一种方法来强迫' UITextField遵循set方法。例如:

我已成功将其限制为仅接受4个字符作为最大值,但我需要将4个字符限制设置为第一个字符"数字"第二个字符" AlphaNumeric"第三/第四是"数字"例如:1Z11

我也无法弄清楚你是否可以通过ASCII或VBA强制大写字母或不能。

任何帮助都是完美的,我环顾四周,但我只能找到的是如何强迫一个或另一个(所有数字或所有字母数字)。

最基本的问候 杰米

-Edit one -

我没有限制字符的代码,如上所述,我只能找到限制其中一种的方法,所以我还没有输入代码(如果你想要,可以链接到堆栈帖子吗?)。

2 个答案:

答案 0 :(得分:1)

尝试为委托方法实现类似的功能:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (range.location != 1) {
        NSScanner *scanner = [NSScanner scannerWithString:string];
        BOOL isNumeric = [scanner scanInteger:NULL] && [scanner isAtEnd];
        return isNumeric;
    }else if (range.location<4){
        return YES;
    }
    return NO;
 }

答案 1 :(得分:0)

请尝试以下

NSCharacterSet *numeric = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSCharacterSet *alphaNumberSet = [[NSCharacterSet alphanumericCharacterSet] invertedSet];


 - (BOOL)textField:(UITextField *)field shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)characters
{       

     //allow backspace
       if ([characters isEqualToString:@""])
{
    return YES;
}
       switch (field.text.length) {
            case 0:
            case 2:
            case 3:
        {
             BOOL retVal =  ([characters rangeOfCharacterFromSet:numeric].location == NSNotFound);
            return retVal;
        }
            break;
         case 1:
        {
            BOOL retVal =  ([characters rangeOfCharacterFromSet:alphaNumberSet].location == NSNotFound);
            return retVal;

        }
        default:
            return NO;
            break;
    }

}