Кажется, UITextFields преобразует все неразрывные пробелы (nbsp, U + 00A0) в пробелы (U + 0020). Это вызывает проблемы при редактировании конкретных номеров локали. Например, во французском / французском языке неразрывный пробел разделяет 1 и%, образуя «1%». Однако, так как UITextField преобразует символ разделителя в пробел, NSNumberFormatter, осведомленный о локали, не может проанализировать строку локали и преобразовать ее в число.
Следующий фрагмент кода иллюстрирует эту проблему.
NSLocale *fr_FR = [[[NSLocale alloc] initWithLocaleIdentifier:@"fr_FR"] autorelease];
NSNumberFormatter *percentageFormatter = [[NSNumberFormatter alloc] init];
[percentageFormatter setFormatterBehavior:NSNumberFormatterBehavior10_4];
[percentageFormatter setGeneratesDecimalNumbers:TRUE];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];
[percentageFormatter setLocale:fr_FR];
NSDecimalNumber *one = [NSDecimalNumber decimalNumberWithString:@"0.01"];
// will be "1 %" where the separator character is a nbsp (this is correct)
NSString *percentage = [percentageFormatter stringFromNumber:one];
UITextField *textField = [[UITextField alloc] init];
textField.text = percentage;
// will be "1 %" where the separator character is a space (this is wrong)
NSString *textFieldValue = textField2.text;
// returns an indeterminate value: may throw an exception, may return nil, etc
// this should return the number 0.01
NSNumber *percentageNumber = [percentageFormatter numberFromString:textFieldValue];
Мой вопрос: как мне помешать UITextField преобразовывать неразрывные пробелы в пробелы?
Я понимаю обходные пути, которые я могу использовать, чтобы взломать это, чтобы оно работало, если я нахожусь в локали, которая использует неразрывные пробелы. Однако, если есть свойство / поведение UITextField, о котором я не знаю, чтобы сохранить nbsp, я хотел бы знать.