如何在Textfield中显示逗号分隔和小数值?

时间:2013-03-12 14:17:50

标签: 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,99,999.00

我尝试使用数字格式化程序但无法实现此目的。如果有任何解决办法,这将非常有用吗?

除此之外,我还需要在文本和逗号分隔之前添加 $符号。

1 个答案:

答案 0 :(得分:1)

由于您希望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 ;
}

我使用NSString类别将@“$ 12,345.67”更改为@“1234567”。

的NSString + Filter.m

- (NSString*) stringByRemovingCharactersInSet:(NSCharacterSet*)charactersToRemove {
    return [[self componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""] ;
}
- (NSString*) stringByFilteringCharactersInSet:(NSCharacterSet*)charactersToKeep {
    NSCharacterSet* charactersToRemove = [charactersToKeep invertedSet] ;
    return [self stringByRemovingCharactersInSet:charactersToRemove] ;
}