当用户以下面提到的所需格式输入文本时,我需要格式化文本。
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
我尝试使用数字格式化程序但无法实现此目的。如果有任何解决办法,这将非常有用吗?
除此之外,我还需要在文本和逗号分隔之前添加 $符号。
答案 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*) stringByRemovingCharactersInSet:(NSCharacterSet*)charactersToRemove {
return [[self componentsSeparatedByCharactersInSet:charactersToRemove] componentsJoinedByString:@""] ;
}
- (NSString*) stringByFilteringCharactersInSet:(NSCharacterSet*)charactersToKeep {
NSCharacterSet* charactersToRemove = [charactersToKeep invertedSet] ;
return [self stringByRemovingCharactersInSet:charactersToRemove] ;
}