密码框textfield 限制输入字母和数字

经过搜索发现网上大部分的做法都是错误的.下边做个记录,算是自己的笔记
自己目标是一星期左右要写一篇文章,感觉还是会对一些人有所帮助
正常的思路是实现代理方法

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {}
在这里进行判断

但经过测试发现这种如果输入汉字点击联想词后并不会执行这个方法,所以

使用addTarget: 这个监听TF.暂时没发现问题
下面是正解

[self.tfPassword addTarget:self action:@selector(passwordTFDidChange:) forControlEvents:UIControlEventEditingChanged];//xianzhi lzc
- (void)passwordTFDidChange:(UITextField *)textField
{
    NSString *inputStr = textField.text;
    if (inputStr.length == 0) return;
    if (inputStr.length>12) {//限制最多12位
        textField.text = [inputStr substringToIndex:12];
    }
    NSMutableString *str = [NSMutableString stringWithString:textField.text];
    for (NSInteger i = str.length-1; i>-1; i--) {
        NSInteger c = [str characterAtIndex:i];
        BOOL result = [self filter:c ];
        if (!result) {
            [str replaceCharactersInRange:NSMakeRange(i, 1) withString:@""];
        }
    }
    textField.text = str;
    
}

- (BOOL)filter:(NSInteger)c//里边随意扩展吧,骚年
{
    if (c>='0' && c<= '9') {
        return YES;
    }
    if (((c>='a' && c<='z') || (c>='A' && c<='Z'))) {
        return YES;
    }
    return NO;
    
}

完事了,有空要看些源码来慢慢提升自己

你可能感兴趣的:(密码框textfield 限制输入字母和数字)