Ios 更改UITextfield中的值时分组分隔符

Ios 更改UITextfield中的值时分组分隔符,ios,uitextfield,nsnumber,Ios,Uitextfield,Nsnumber,要在UITextField中编辑分组分隔符,需要在编辑时切换分组分隔符。否则,返回值(存储为NSNumbervalue)为(NULL),这是由于错误放置了凿槽分隔符(参见图片,想象数字将被另一个数字扩展,例如扩展到“50.0000”) 我怎样才能做到这一点 现在,该值在-(void)textfielddidediting:(UITextField*)textField方法中处理 (我的语言环境是德语,所以“.”是分组分隔符而不是小数分隔符!)但我尝试让代码适用于所有区域。您可以在这里看到答案:

要在
UITextField
中编辑分组分隔符,需要在编辑时切换分组分隔符。否则,返回值(存储为
NSNumber
value)为(NULL),这是由于错误放置了凿槽分隔符(参见图片,想象数字将被另一个数字扩展,例如扩展到“50.0000”)

我怎样才能做到这一点

现在,该值在
-(void)textfielddidediting:(UITextField*)textField
方法中处理


(我的语言环境是德语,所以“.”是分组分隔符而不是小数分隔符!)但我尝试让代码适用于所有区域。

您可以在这里看到答案:

不要自己设置数字格式。你几乎肯定得不到 所有边缘情况都正确或正确地处理所有可能的区域设置。使用 用于将数字数据格式化为本地化格式的NSNumberFormatter 字符串表示法

您可以使用NSNumberFormatter实例方法 -setGroupingSeparator:将分组分隔符设置为@”。(或者更好的设置为[[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];谢谢@ntesler)和 -setGroupingSize:每隔3位放置一个分组分隔符

++,,
Kevin MACHADO

尝试以下解决方案:

-(void) textFieldDidEndEditing:(UITextField *)textField {

 NSString *stringWithoutDots = [textField.text stringByReplacingOccurrencesOfString:@"." withString:@""]; //remove dots

int number = [stringWithoutDots intValue]; //convert into int

NSNumberFormatter *formatter = [NSNumberFormatter new];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; // this line is important!

NSString *formatted = [formatter stringFromNumber:[NSNumber numberWithInteger:number]];



}
我希望这对你有帮助。 凯文·马查多(Kevin MACHADO)

多亏了狄尼克和他的第二个建议。我不得不稍微调整一下,现在它就像一个魔咒。对于所有有相同问题的人,这里是我的最终代码:

-(void) textFieldDidEndEditing:(UITextField *)textField
{

NSMutableString* mstring = [[textField text] mutableCopy];

NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc]init];
[numberFormatter setLocale:[NSLocale currentLocale]];
[numberFormatter setNumberStyle:NSNumberFormatterDecimalStyle];

NSString* localeSeparator = [[NSLocale currentLocale]
                             objectForKey:NSLocaleGroupingSeparator];
NSNumber* number = [numberFormatter numberFromString:[mstring
                stringByReplacingOccurrencesOfString:localeSeparator withString:@""]];

    [textField setText:[numberFormatter stringFromNumber:number]];        
}

感谢jnivek,我使用了
NSNumberFormatter
,以便在文本字段中创建单独的输出。当文本字段中已编辑(扩展)的编号返回到(格式化)NSNumber对象时,会出现此问题。如果数字扩展了一位,由于分组分隔符错误,返回值为(NULL)。例如:文本字段显示“50.000”,用户在“50.0000”的末尾添加了一个数字,当现在返回时,文本不再作为分组数字对象返回。哦,好的,对不起,我不明白:)无论如何,谢谢你的帮助!谢谢你的邀请,我会查一查的。给我点时间。我不得不稍微调整一下,但你给了我一些很好的提示。谢谢你!