美文网首页iOS
iOS金额输入限制

iOS金额输入限制

作者: Roy_Liang | 来源:发表于2017-02-07 17:07 被阅读1235次
    - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    
    UITextField *countTextField = self.moneyTF;
    NSString *NumbersWithDot = @".1234567890";
    NSString *NumbersWithoutDot = @"1234567890";
    
    // 判断是否输入内容,或者用户点击的是键盘的删除按钮
    if (![string isEqualToString:@""]) {
        
        NSCharacterSet *cs;
        
        if ([textField isEqual:countTextField]) {
            
            // 小数点在字符串中的位置 第一个数字从0位置开始
            
            NSInteger dotLocation = [textField.text rangeOfString:@"."].location;
            
            
            
            // 判断字符串中是否有小数点
            // NSNotFound 表示请求操作的某个内容或者item没有发现,或者不存在
            
            // range.location 表示的是当前输入的内容在整个字符串中的位置,位置编号从0开始
            
            if (dotLocation == NSNotFound ) {
                
                // -- 如果限制非第一位才能输入小数点,加上 && range.location != 0
                
                
                // 取只包含“myDotNumbers”中包含的内容,其余内容都被去掉
                
                /*
                 
                 [NSCharacterSet characterSetWithCharactersInString:myDotNumbers]的作用是去掉"myDotNumbers"中包含的所有内容,只要字符串中有内容与"myDotNumbers"中的部分内容相同都会被舍去
                 
                 
                 
                 在上述方法的末尾加上invertedSet就会使作用颠倒,只取与“myDotNumbers”中内容相同的字符
                 
                 */
                
                cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithDot] invertedSet];
                
                if (range.location >= 9) {
                    
                    NSLog(@"单笔金额不能超过亿位");
                    
                    if ([string isEqualToString:@"."] && range.location == 9) {
                        
                        return YES;
                        
                    }
                    
                    
                    
                    return NO;
                    
                }
                
            }else {
                
                cs = [[NSCharacterSet characterSetWithCharactersInString:NumbersWithoutDot] invertedSet];
                
            }
            
            
            
            // 按cs分离出数组,数组按@""分离出字符串
            
            NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""];
            
            BOOL basicTest = [string isEqualToString:filtered];
            
            if (!basicTest) {
                
                NSLog(@"只能输入数字和小数点");
                
                return NO;
                
            }
            
            
            
            if (dotLocation != NSNotFound && range.location > dotLocation + 2) {
                
                NSLog(@"小数点后最多两位");
                
                return NO;
                
            }
            
            
            
            if (textField.text.length > 11) {
                
                return NO;
                
            }
            
        }
        
    }
    
    
    
    return YES;
    
    }
    

    相关文章

      网友评论

        本文标题:iOS金额输入限制

        本文链接:https://www.haomeiwen.com/subject/enrmittx.html