`

UITextField只能输入数字且小数点后保留2位

    博客分类:
  • ios
 
阅读更多
#pragma mark UITextFieldDelegate
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField == _priceLabel) {
        NSScanner      *scanner    = [NSScanner scannerWithString:string];
        NSCharacterSet *numbers;
        NSRange         pointRange = [textField.text rangeOfString:@"."];
        
        if ( (pointRange.length > 0) && (pointRange.location < range.location  || pointRange.location > range.location + range.length) )
        {
            numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
        }
        else
        {
            numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789."];
        }
        
        if ( [textField.text isEqualToString:@""] && [string isEqualToString:@"."] )
        {
            return NO;
        }
        
        short remain = 2; //默认保留2位小数
        
        NSString *tempStr = [textField.text stringByAppendingString:string];
        NSUInteger strlen = [tempStr length];
        if(pointRange.length > 0 && pointRange.location > 0){ //判断输入框内是否含有“.”。
            if([string isEqualToString:@"."]){ //当输入框内已经含有“.”时,如果再输入“.”则被视为无效。
                return NO;
            }
            if(strlen > 0 && (strlen - pointRange.location) > remain+1){ //当输入框内已经含有“.”,当字符串长度减去小数点前面的字符串长度大于需要要保留的小数点位数,则视当次输入无效。
                return NO;
            }
        }
        
        NSRange zeroRange = [textField.text rangeOfString:@"0"];
        if(zeroRange.length == 1 && zeroRange.location == 0){ //判断输入框第一个字符是否为“0”
            if(![string isEqualToString:@"0"] && ![string isEqualToString:@"."] && [textField.text length] == 1){ //当输入框只有一个字符并且字符为“0”时,再输入不为“0”或者“.”的字符时,则将此输入替换输入框的这唯一字符。
                textField.text = string;
                return NO;
            }else{
                if(pointRange.length == 0 && pointRange.location > 0){ //当输入框第一个字符为“0”时,并且没有“.”字符时,如果当此输入的字符为“0”,则视当此输入无效。
                    if([string isEqualToString:@"0"]){
                        return NO;
                    }
                }
            }
        }
        
        NSString *buffer;
        if ( ![scanner scanCharactersFromSet:numbers intoString:&buffer] && ([string length] != 0) )
        {
            return NO;
        }
        
    }
    
    return YES;
}
分享到:
评论

相关推荐

    UITextField如何使用带有小数点的Number Pad

    这样,你的`UITextField`就可以正确地使用带有小数点的键盘,并且限制了用户输入的数字格式。确保在你的项目中正确设置`UITextField`的代理,并遵循`UITextFieldDelegate`协议。 在提供的压缩包文件`...

    UITextField现在输入字符长度

    在iOS开发中,`UITextField` 是一个常用的UI控件,用于接收用户输入的文本。在许多应用场景中,我们可能需要对用户输入的字符长度进行限制,例如手机号码、身份证号等,以确保数据的准确性和格式的一致性。标题提到...

    ios oc 自定义数字键盘keyboard带小数点可自定义按键

    例如,如果允许两位小数,那么在用户输入第二个小数点后,应禁用小数点按钮。 5. 键盘切换:为了提供与系统键盘相似的体验,你需要处理键盘的显示和隐藏。可以使用UIKeyboardWillShowNotification和...

    通过一行代码搞定UITextField的输入格式限制

    在开发的过程中,每次写到UITextField,就不由得心里不爽,因为要考虑到各种输入限制,实现代理、通知等一些麻烦繁琐的东西,就心中不爽,所以才写了这个ZASTextFieldFormat (本地下载)简单的轮子,先暂时用着,...

    iOS-UITextField自定义输入限制

    有时,我们可能需要对用户在`UITextField`中输入的内容进行特定的限制,比如限制只能输入数字、限制小数位数、禁止输入特殊字符等。这篇教程将详细介绍如何自定义`UITextField`的输入限制,以实现保留两位小数并排除...

    iOS UITextField、UITextView只限输入中文、英文、数字及实时限制字符个数的封装实现代码

    在iOS开发中,`UITextField` 和 `UITextView` 是用于用户输入文本的两种常见控件。在某些场景下,我们可能需要对用户的输入进行限制,比如仅允许输入中文、英文和数字,并且实时限制输入的字符数量。这篇文档将详细...

    swift-IB方式配置UITextField组件输入规则格式验证长度跳转顺序

    例如,若要限制只能输入数字,可以在该方法内进行判断并返回`false`来阻止非数字字符的输入。 ### 长度限制 对于输入长度的限制,同样可以使用代理方法。在`textField(_:shouldChangeCharactersIn:...

    UITextfield

    5. `keyboardType`:设置键盘类型,例如数字键盘、电话键盘等,对于炒股软件中的百分比或数字输入,可能需要设置为`UIKeyboardType.DecimalPad`以显示小数点。 6. `autocapitalizationType` 和 `autocorrectionType`...

    iOS 小数点键盘的实现(仿微信红包键盘)

    这个键盘允许用户输入数值并精确到小数点后几位。本文将详细介绍如何在iOS中实现这样的小数点键盘。 首先,我们需要了解iOS中的UIKeyboardType枚举,它定义了系统提供的各种键盘类型,如默认、数字、电话等。但这些...

    UITextField

    在iOS开发中,`UITextField`是用户界面中用于输入文本的基本元素。它的功能强大且灵活,可以用于创建各种形式的文本输入字段,如用户名、密码输入框等。本篇文章将详细探讨如何实现`UITextField`的键盘管理,包括...

    使用UITextField限制只可输入中,英文,数字的方法

    但有时需要限制用户只能在UITextField中输入特定类型的字符,例如仅中英文、数字等。为了实现这一功能,可以利用UITextField的代理方法和NSPredicate正则表达式进行过滤。 首先,需要设置UITextField的代理,并实现...

    UITextField动态获取汉字个数

    在iOS开发中,`UITextField` 是一个常用的UI组件,用于接收用户输入文本。在某些应用场景中,例如限制用户输入汉字的数量,我们需要实时监控`UITextField`中的汉字个数。本篇文章将详细讲解如何通过监听通知来动态...

    UITextField手机、验证码、价格等格式化

    例如,当输入价格时,可以自动添加货币符号并在小数点后保留两位。 4. **键盘类型选择** - 设置`textField.keyboardType`属性,根据需求选择合适的键盘类型。比如,对于手机号码,可以选择`.numberPad`;对于价格...

    UITextField Demo实例

    在iOS开发中,`UITextField` 是一个至关重要的UI组件,用于接收用户输入文本。本教程将深入探讨`UITextField`在Objective-C中的应用,通过实际的Demo实例帮助开发者更好地理解和掌握其使用方法。在这个名为...

    使用UITextField限制输入金额是正确小数

    要判断输入金额为正确金额的方法有两个,一个是用正则表达式,另一个就是用textfield的代理方法 有时候难免遇到这样的需求,不符合规则的金额就不让输入时,那用这种方法比较合理 ...1.要求用户输入首位不能为小数点;

    ios-UITextField邮箱后缀联想输入.zip

    在iOS开发中,`UITextField` 是一个非常重要的控件,用于接收用户输入的文本。在某些应用场景下,比如注册或登录界面,我们可能需要用户输入邮箱地址。为了提高用户体验,可以实现一个功能,即当用户在`UITextField`...

    iOS 键盘输入限制(只能输入字母,数字,禁止输入特殊符号)

    通过以上步骤,你的iOS应用就能限制用户在特定的UITextField中只能输入字母和数字,而不能输入特殊符号了。这种方法对于创建如密码输入、手机号码验证等场景非常有用,可以有效防止用户输入无效字符,提高用户体验。

    ios-UITextField,UITextView限制输入长度和类型.zip

    对UITextField,UITextView增加字符,字节限制,输入字符类型限制 typedef NS_ENUM(NSInteger, XLFTextLimitType) { XLFTextLimitTypeNone, // 无限制 XLFTextLimitTypeByte, // 字节数限制 ...

    UITextField+BlockDemo

    在iOS开发中,`UITextField` 是一个至关重要的UI组件,用于接收用户输入的文字信息。`UITextField+BlockDemo` 是一个示例项目,它展示了如何通过扩展`UITextField` 类并使用Blocks(block语法)来增强其功能,使得在...

Global site tag (gtag.js) - Google Analytics