UITextFieldDelegate 方法详解

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"text = %@", textField.text);
    NSLog(@"string = %@", string);
    NSLog(@"range = %@", NSStringFromRange(range));
 }
 
// 输入时间的数据
2016-10-27 13:52:41.983 测试[1670:383188] text = 
2016-10-27 13:52:41.984 测试[1670:383188] string = Q
2016-10-27 13:52:41.985 测试[1670:383188] range = {0, 0}
2016-10-27 13:53:08.784 测试[1670:383188] text = Q
2016-10-27 13:53:08.785 测试[1670:383188] string = w
2016-10-27 13:53:08.785 测试[1670:383188] range = {1, 0}
2016-10-27 13:53:15.386 测试[1670:383188] text = Qw
2016-10-27 13:53:15.386 测试[1670:383188] string = e
2016-10-27 13:53:15.387 测试[1670:383188] range = {2, 0}

// 删除时间的数据
2016-10-27 14:14:49.446 测试[1670:383188] text = Qwe
2016-10-27 14:14:49.447 测试[1670:383188] string = 
2016-10-27 14:14:49.447 测试[1670:383188] range = {2, 1}
2016-10-27 14:14:49.712 测试[1670:383188] text = Qw
2016-10-27 14:14:49.712 测试[1670:383188] string = 
2016-10-27 14:14:49.713 测试[1670:383188] range = {1, 1}
2016-10-27 14:14:50.762 测试[1670:383188] text = Q
2016-10-27 14:14:50.762 测试[1670:383188] string = 
2016-10-27 14:14:50.763 测试[1670:383188] range = {0, 1}

相信通过数据大家都会知道其中的规律。
接下来我们实现一个文本框只能输入0-9,其他的字符限制不让输入,并且首字母不能输入0。那肯定有人会说,直接使用数字几盘就完事了,简单方便。但是如果有小数点的输入呢?ios 并没有提供这样的键盘。怎么办, 要么使用其他的键盘,要么自定义键盘。用其他的键盘就涉及到了文本限制输入了。
靠,说了一大堆废话,我们来开始干点正事吧。。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSLog(@"string = %@", string);
    NSLog(@"range = %@", NSStringFromRange(range));
    if (string.length > 0) { // 表示输入
        unichar single = [string characterAtIndex:0];//当前输入的字符
        if ((single >= '0' && single <= '9')) {//数据格式正确
            //首字母不能为0和小数点
            if(textField.text.length == 0) {
                if (single == '0') { // 第一个数字不能为0
                    [textField.text stringByReplacingCharactersInRange:range withString:@""];
                    return NO;
                }
            }
        } else {//输入的数据格式不正确
            [textField.text stringByReplacingCharactersInRange:range withString:@""];
            return NO;
        }
    } else { // 表示删除
        return YES;
    }
    return YES; 
    }

此时运行程序, 你就会惊喜的发现咱们想要的效果了。
又不懂的地方可以第一时间问我。

你可能感兴趣的:(UITextFieldDelegate 方法详解)