关闭

关于textfield(2)

70人阅读 评论(0) 收藏 举报

关于textfield输入电话号码

       通过添加UITextFieldDelegate代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:
(NSString *)string {
    return [self validateNumber:string];
}
 
- (BOOL)validateNumber:(NSString*)number {
    BOOL res = YES;
    NSCharacterSet* tmpSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
    int i = 0;
    while (i < number.length) {
        NSString * string = [number substringWithRange:NSMakeRange(i, 1)];
        NSRange range = [string rangeOfCharacterFromSet:tmpSet];
        if (range.length == 0) {
            res = NO;
            break;
        }
        i++;
    }
    return res;
}

关于textfield输入身份正号  最后一位x的解决办法



- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {  
    // string.length为0,表明没有输入字符,应该是正在删除,应该返回YES。  
    if (string.length == 0) {  
        return YES;  
    }  
    // length为当前输入框中的字符长度  
    NSUInteger length = textField.text.length + string.length;  
    // 如果该页面中还有其他的输入框,则需要做这个判断  
    if (textField == self.idNumberTextField) {  
        // str为当前输入框中的字符  
        NSString *str = [NSString stringWithFormat:@"%@%@", textField.text, string];  
        // 当输入到17位数的时候,通过theLastIsX方法判断最后一位是不是X  
        if (length == 17 && [self theLastIsX:str]) {  
            // 如果是17位,并通过前17位计算出18位为X,自动补全,并返回NO,禁止编辑。  
            textField.text = [NSString stringWithFormat:@"%@%@X", textField.text, string];  
            return NO;  
        }  
        // 如果是其他情况则直接返回小于等于18(最多输入18位)  
        return length <= 18;  
    }  
    return YES;  
}  
// 判断最后一个是不是X  
- (BOOL)theLastIsX:(NSString *)IDNumber {  
    NSMutableArray *IDArray = [NSMutableArray array];  
    for (int i = 0; i < 17; i++) {  
        NSRange range = NSMakeRange(i, 1);  
        NSString *subString = [IDNumber substringWithRange:range];  
        [IDArray addObject:subString];  
    }  
    NSArray *coefficientArray = [NSArray arrayWithObjects:@"7", @"9", @"10", @"5", @"8", @"4", @"2", @"1", @"6", @"3", @"7", @"9", @"10", @"5", @"8", @"4", @"2", nil nil];  
    int sum = 0;  
    for (int i = 0; i < 17; i++) {  
        int coefficient = [coefficientArray[i] intValue];  
        int ID = [IDArray[i] intValue];  
        sum += coefficient * ID;  
    }  
    if (sum % 11 == 2) return YES;  
    else return NO;  

该方法来自http://blog.csdn.net/l2i2j2/article/details/51542028   引用一下    

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3516次
    • 积分:219
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类