[iOS 文本输入限制]限制输入特定字符串等

news/2024/7/20 22:11:05 标签: ios, string, uitextfield, 金额, 中文

通常我们需要限制输入数字 字符 字母 或者中文等等
一般情况我们用到textfiled的代理方法去做

//
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSCharacterSet *charer = [NSCharacterSet characterSetWithCharactersInString:@string">"12345"];
    NSString *filed  = [[string componentsSeparatedByCharactersInSet:charer] componentsJoinedByString:@string">""];
    if ([filed isEqualToString:string]) {
        return NO;
    }
    return yes;
}

这样就可以限制只输入 字符串里给出的字符

分享一个
限制只输入数字金额,并且限制输入最大数字,且自动判断输入0后变为小数点的方法

步骤.
设置textfiled的delegate = self;

//
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{


    return [ViewController moneyTextField:textField shouldChangeCharactersInRange:range replacementString:string max:1000];
}



#pragma mark - 限制输入数字以及最大值 方法实现
+(BOOL)moneyTextField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string max:(NSInteger)max
{
    //筛选输入内容确保正确性
    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@string">"0123456789.\b"];
    string = [string stringByReplacingOccurrencesOfString:@string">" " withString:@string">""];
    if ([string rangeOfCharacterFromSet:[characterSet invertedSet]].location != NSNotFound) {
        return NO;
    }

    BOOL isHasRadixPoint = YES;
    //小数点后面的位数
    NSInteger RadixPointNum = 2;
    NSString *existText = textField.text;
    //判断是否含有小数点
    if ([existText rangeOfString:@string">"."].location == NSNotFound) {
        isHasRadixPoint = NO;
    }

    if (string.length > 0) {
        unichar newChar = [string characterAtIndex:0];
        //开始进入判断文本
        if (existText.length>0) {
            if ([existText characterAtIndex:0]==string">'0') {
                //当首位是0的时候
                if (newChar==string">'0') {
                    //输入是零的时候判断是否有小数点
                    if (isHasRadixPoint) {
                        return range.location<=2;
                    }else{
                        return NO;
                    }
                }else if((newChar > string">'0' && newChar <= string">'9') &&existText.length<=1){
                    textField.text = @string">"";
                }
            }
        }

        if ((newChar >= string">'0' && newChar <= string">'9') || newChar == string">'.' ) {
            if (newChar == string">'.') {
                if (existText.length==0) {
                    textField.text = @string">"0.";
                    return NO;
                }else{
                    return !isHasRadixPoint;
                }
            }else {
                if (isHasRadixPoint) {
                    NSRange ran = [existText rangeOfString:@string">"."];
                    return (range.location - ran.location <= RadixPointNum);
                } else{
                    //小数点前面的位数
                    //return existText.length<6;
                    if ([textField.text isEqualToString:@string">"0"]){
                        textField.text = @string">"0.";
                    }
                    NSString *nowString;
                    if (range.length==0) {
                        nowString = [NSString stringWithFormat:@string">"%@%@",textField.text,string];
                    }else{
                        nowString = [textField.text stringByReplacingCharactersInRange:range withString:string];
                    }
                    //                    NSString *nowString = [textField.text stringByReplacingCharactersInRange:range withString:string];
                    if (nowString.doubleValue>= max) {
                        textField.text = [NSString stringWithFormat:@string">"%ld",max];
                        return NO;
                    }
                    return nowString.doubleValue <= max;
                }
            }
        }else {
            return YES;
        }
    }
    return YES;
}


http://www.niftyadmin.cn/n/1557677.html

相关文章

cesium点击获取鼠标位置

很常见的功能&#xff0c;鼠标点击获取点击的经纬度。 var handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas); //此方法获取鼠标点击位置经纬度handler.setInputAction(function (e) {var position viewer.scene.pickPosition(e.position);//将笛卡尔坐标转…

oracle 架构和一些工具了解

oracle的架构大概分为3部分&#xff0c; 客户端&#xff1a;用户端 oracle instance&#xff1a;叫做实例&#xff0c;由内存结构&#xff08;内存池或者叫SGA&#xff09;和后台进程组成。Oracle Instance是Oracle RDBMS的核心之一&#xff0c;负责RDBMS的管理功能。内存结构有…

[iOS 禁用第三方输入法] 禁用第三方输入法+ExtensionPointIdentifier理解

自从iOS8开始,许多第三方输入法出现,但是旧项目里面没有对第三方输入法做过适配,倒是用户出现许多问题, 网上有代码,在 Appdelegate.m中,添加 - (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier…

表格基础

表格应用-1 获取 tBodies、tHead、tFoot、rows、cells 隔行变色 鼠标移入高亮 删除、添加一行 表格应用-2 搜索 版本1&#xff1a;基础版本——字符串比较 版本2&#xff1a;忽略大小写——大小写转换 版本3&#xff1a;模糊搜索——search的使用 版本4&#xff1a;多关键词——…

react、vue 使用node.js eventEmitter跨组件传参(还可以用来监听值的变化处理一些事情)

前言&#xff1a; 最近在react项目中&#xff0c;遇到了这样一个场景&#xff0c;首页有很多组件&#xff0c;地图组件&#xff0c;侧边栏&#xff0c;图层管理&#xff0c;甚至图层管理还有子组件。这样父/子/孙&#xff0c;甚至没有任何关系的组件都要能拿到首页的一些状态。…

[iOS Block] 视图A.B之间的回调实例

背景介绍 有两个视图控制器 A B B作为A的subViewController 要求 在B上处理点击事件 , 改变A上的元素属性值 一般处理的方法有代理/ 通知 / Block 这里用Block来做 1.在B上 typeDef 一个block typedef void(^PayWayViewControllerBlock) (NSString *payWayTpye , UIVi…

Windows10家庭版连接远程桌面出现credssp加密oracle修正问题

我发现我的win10不能连接别人的远程桌面,问题如下&#xff1a; 1.windows10家庭版需要修改注册表&#xff0c;家庭版没有组织策略&#xff1a; 2.winR打开快速启动命令行输入"regedit": 3.依次打开&#xff1a;HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\Curren…

react使用(react-html-table-to-excel)把table导出为Excel以及配合antd使用

项目里有个把表格导出为Excel的功能&#xff0c;使用的是react-html-table-to-excel实现的也很简单&#xff0c;记录一下。 1.实现过程 1.下载依赖:npm install --save react-html-table-to-excel npm install --save react-html-table-to-excel 2.导入&#xff1a;import …