Кажется UITextFields конвертировать все non-breaking spaces (nbsp, U + 00A0) в spaces (U + 0020). Это вызывает проблемы при редактировании конкретных локальных номеров. Например, во французском/французском локале неразрывное пространство разделяет 1 и% на «1%». Однако, поскольку UITextField преобразует символ разделителя в пробел, неизвестный локали NSNumberFormatter не может проанализировать строку локали и преобразовать ее в число.UITextField преобразует неразрывные пробелы в пробелы?
Этот фрагмент кода иллюстрирует эту проблему.
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, я хотел бы знать.
Это тоже было мое подозрение ... Я подумал, что сначала попробую спросить, прежде чем регистрировать ошибку в Apple. – shek 2008-12-01 22:54:09