#pragma mark --- UITextFieldDelegate ---
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    // 判断是否有小数点
    if ([textField.text containsString:@"."]) {
        self.isHaveDian = YES;
    }else{
        self.isHaveDian = NO;
    }
    
    if (string.length > 0) {
        
        //当前输入的字符
        unichar single = [string characterAtIndex:0];
        
        // 不能输入.0-9以外的字符
        if (!((single >= '0' && single <= '9') || single == '.'))
        {
            return NO;
        }
        
        // 只能有一个小数点
        if (self.isHaveDian && single == '.') {
            return NO;
        }
        
        // 如果第一位是.则前面加上0.
        if ((textField.text.length == 0) && (single == '.')) {
            textField.text = @"0";
        }
        
        // 如果第一位是0则后面必须输入点,否则不能输入。
        if ([textField.text hasPrefix:@"0"]) {
            if (textField.text.length > 1) {
                NSString *secondStr = [textField.text substringWithRange:NSMakeRange(1, 1)];
                if (![secondStr isEqualToString:@"."]) {
                    return NO;
                }
            }else{
                if (![string isEqualToString:@"."]) {
                    return NO;
                }
            }
        }
        
        // 小数点后最多能输入两位
        if (self.isHaveDian) {
            NSRange ran = [textField.text rangeOfString:@"."];
            // 由于range.location是NSUInteger类型的,所以这里不能通过(range.location - ran.location)>2来判断
            if (range.location > ran.location) {
                if ([textField.text pathExtension].length > 5) {
                    return NO;
                }
            }
        }
    }
    return YES;
}

最新文章

  1. 3.EF 6.0 Code-First实现增删查改
  2. 《Web全栈工程师的自我修养》读书笔记(转载)
  3. 2-4. Using auto with Functions
  4. Redis脚本插件之————执行Lua脚本示例
  5. Eclipse项目 迁移到 Intellj IDEA
  6. 1.AJAX简介
  7. (转)Iphone数组一些基础操作 NSArray/NSMutableArray
  8. 降低成本是永恒的追求(xamarin)
  9. Xps实现文档显示、套打功能
  10. python str的一些方法
  11. Centos7-卸载自带的jdk 安装jdk8
  12. 夏令营提高班上午上机测试 Day 2 解题报告
  13. java网络编程(3)——UDP
  14. Tiny4412之串口(Uart)驱动编写
  15. 【设计模式】桥接模式 Bridge Pattern
  16. c++常用
  17. CF1029E
  18. 虚拟机安装及Oracle安装
  19. FFmpeg流媒体处理-收流与推流
  20. python套接字编程基础

热门文章

  1. 使用百度ocr接口识别验证码
  2. Window下安装Scala出现:此时不应有 \scala\bin\..\lib\jline-2.14.5.jar
  3. opencv 之 transformation
  4. NABCD-课程表开发
  5. css,html备忘录
  6. C++读取与保持图片
  7. oracle数值函数 abs()、 ceil()、 cos()、 cosh()
  8. NIO学习笔记
  9. 使用css3实现动画来开启GPU加速
  10. 合并回文子串(区间dp)