Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在UITextField中显示逗号分隔值和分数值?_Ios_Uitextfield_Nsnumberformatter - Fatal编程技术网

Ios 如何在UITextField中显示逗号分隔值和分数值?

Ios 如何在UITextField中显示逗号分隔值和分数值?,ios,uitextfield,nsnumberformatter,Ios,Uitextfield,Nsnumberformatter,当用户以下面提到的所需格式输入文本时,我需要格式化文本 1) 当用户输入0作为第一个字符时,文本字段应将文本显示为0.00 2) 当用户输入1作为第二个字符时,文本字段应显示为0.01 3) 当用户输入2作为第三个字符时,文本字段应显示为0.12 4) 当用户输入3作为第四个字符时,文本字段应显示为1.23 5) 当用户输入4作为第五个字符时,文本字段应显示为12.34 这应该持续到7个整数位。最高值应为99,99999.00 我曾尝试使用数字格式化程序,但无法实现这一点。如果有任何解决方案,这

当用户以下面提到的所需格式输入文本时,我需要格式化文本

1) 当用户输入0作为第一个字符时,文本字段应将文本显示为0.00

2) 当用户输入1作为第二个字符时,文本字段应显示为0.01

3) 当用户输入2作为第三个字符时,文本字段应显示为0.12

4) 当用户输入3作为第四个字符时,文本字段应显示为1.23

5) 当用户输入4作为第五个字符时,文本字段应显示为12.34

这应该持续到7个整数位。最高值应为99,99999.00

我曾尝试使用数字格式化程序,但无法实现这一点。如果有任何解决方案,这将是非常有帮助的


除此之外,我还需要在文本前面添加一个$符号以及逗号分隔符

由于您希望UITextField最多包含7个整数位数,因此需要验证每次修改,并防止任何导致数字大于7个整数位数的修改。我知道最简单的方法是UITextFieldDelegate方法
shouldChangeCharactersInRange

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

    NSString* modifiedFieldText = [textField.text stringByReplacingCharactersInRange:range withString:string] ;
    // Remove all characters except for the digits 0 - 9.
    NSString* filteredToDigits = [modifiedFieldText stringByFilteringCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]] ;
    // Change textField's text only if the result is <= 9 digits  (7 integer digits and 2 fraction digits).
    if ( filteredToDigits.length <= 9 ) {
        // If you'd rather this method didn't change textField's text and only determined whether or not the change should proceed, you can move this code block into a method triggered by textField's Editing Changed, replacing this block with "return YES".  You'll need to once again filter textField's text to only the characters 0 - 9.
        NSNumberFormatter* numberFormatter = [NSNumberFormatter new] ;
        numberFormatter.numberStyle = NSNumberFormatterCurrencyStyle ;

        NSNumber* asNumber = @( filteredToDigits.doubleValue / 100.0 ) ;
        textField.text = [numberFormatter stringFromNumber:asNumber] ;
    }
    // This method just changed textField's text based on the user's input, so iOS should not also change textField's text.
    return NO ;
}

使用NSRegularExpression:)@有谁能解释为什么这个问题被投了这么多的反对票?连我都不明白为什么会有这么多的反对票?这个问题既不是无效的,也不是超出范围的。我只是想找到解决我问题的办法。有人能证明吗?Superr!!!非常感谢约翰。上面的答案真是妙不可言。。再次感谢。你能投票吗?是的,我在回答之前就投票了。
- (NSString*) stringByRemovingCharactersInSet:(NSCharacterSet*)charactersToRemove {
    return [[self componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""] ;
}
- (NSString*) stringByFilteringCharactersInSet:(NSCharacterSet*)charactersToKeep {
    NSCharacterSet* charactersToRemove = [charactersToKeep invertedSet] ;
    return [self stringByRemovingCharactersInSet:charactersToRemove] ;
}