UITextField 限制只能输入数字和小数点,只能有两位小数

本文介绍了一个iOS应用中对UITextField进行数值输入校验的方法,确保用户只能输入有效的数字,并限制了数字的小数部分最多为两位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    if (textField == _dosageTextField )  {
       
if ([textField.textrangeOfString:@"."].location == NSNotFound) {
                    
isHaveDian = NO;
                 }
            
if ([string length] > 0) {
           
                   
unichar single = [string characterAtIndex:0];//当前输入的字符
                    
if ((single >= '0' && single <= '9') || single == '.') {//数据格式正确
               
                           
//首字母不能为0和小数点
                           
if([textField.textlength] == 0){
                                    
if(single == '.') {
                                             [
selfshowError:@"亲,第一个数字不能为小数点"];
                                            [textField.
textstringByReplacingCharactersInRange:range withString:@""];
                                           
returnNO;
                                         }
                                    
if (single == '0') {
                                             [
selfshowError:@"亲,第一个数字不能为0"];
                                             [textField.
textstringByReplacingCharactersInRange:range withString:@""];
                                            
returnNO;
                                         }
                                 }
               
                            
//输入的字符是否是小数点
                            
if (single == '.') {
                                    
if(!isHaveDian)//text中还没有小数点
                                         {
                                                
isHaveDian = YES;
                                                
returnYES;
                           
                                             }
else{
                                                     [
selfshowError:@"亲,您已经输入过小数点了"];
                                                     [textField.
textstringByReplacingCharactersInRange:range withString:@""];
                                                    
returnNO;
                                                 }
                                 }
else{
                                        
if (isHaveDian) {//存在小数点
                           
                                                
//判断小数点的位数
                                                
NSRange ran = [textField.textrangeOfString:@"."];
                                                
if (range.location - ran.location <= 10) {
                                                        
returnYES;
                                                     }
else{
                                                           [
selfshowError:@"亲,您最多输入两位小数"];
                                                            
returnNO;
                                                         }
                                             }
else{
                                                    
returnYES;
                                                 }
                                    }
                         }
else{//输入的数据格式不正确
                                 [
selfshowError:@"亲,您输入的格式不正确"];
                                 [textField.
textstringByReplacingCharactersInRange:range withString:@""];
                                
returnNO;
                             }
                }
            
else
                 {
                   
returnYES;
                }
    }
   
returnYES;
}

- (void)showError:(NSString *)errorString {
     [
selfrsva_presentViewControllerWithMessage:errorString];
}

- (void )rsva_presentViewControllerWithMessage:(NSString *)message {
   
   
UIAlertController *alertController = [RSMethodylg_presentAlertControllerWithTitle:@"提示"message:message];
    [
selfpresentViewController:alertController animated:YEScompletion:nil];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值