如何通过格式化数字来设置TextField的字符长度
Posted
技术标签:
【中文标题】如何通过格式化数字来设置TextField的字符长度【英文标题】:How to set character length of TextField by deformatting the formatted number 【发布时间】:2011-11-16 14:01:22 【问题描述】:我使用以下代码将字符长度设置为 17:
- (BOOL)textField:(UITextField *)theTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
// NSString *stringWithoutSpaces = [theTextField.text stringByReplacingOccurrencesOfString:@"," withString:@""];
int limit = 16;
switch (theTextField.tag)
case 10:
NSLog(@"I m In 10");
//To set maximum No.of Charaters.
return !([theTextField.text length]>limit && [string length] > range.length);
break;
case 11:
NSLog(@"I m In 11");
//To set maximum No.of Charaters.
return !([theTextField.text length]>limit && [string length] > range.length);
break;
default:
NSLog(@"I m In default");
break;
return YES;
我正在格式化textfieldShouldEndEditing
中输入的字符,
例如,
我输入了12345678912345678
,它的上限为17,格式为12,345,678,912,345,678
我们再次回到TextField
,我们编辑为12,345,678,912,345
,然后它将,
(逗号)视为一个字符,因此TextField
的长度增加了。
如何解决这个问题?
【问题讨论】:
【参考方案1】:简单的解决方案:
NSString *stringNumber = @"12,345,678,912,345";
NSUInteger length = [[stringNumber stringByReplacingOccurrencesOfString:@"," withString:@""] length];
NSLog(@"length: %lu", length);
NSLog 输出:
length: 14
使用数字格式化程序。
例子:
NSString *stringNumber = @"12,345,678,912,345";
NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
[formatter setNumberStyle:NSNumberFormatterDecimalStyle];
NSNumber *number = [formatter numberFromString:stringNumber];
NSLog(@"number: %@", number);
stringNumber = [number stringValue];
NSLog(@"stringNumber: %@", stringNumber);
NSLog 输出:
number: 12345678912345
stringNumber: 12345678912345
【讨论】:
它的工作但是,如果我们输入 17 位,结果数会增加到 +1 或有时会减少,例如,我输入 12345678912345678,然后我得到 12,345,678,912,345,678 并再次编辑为 12,345,678,912,345,679 然后它的结果到 12,345,678,912,345,680 这个想多了,我稍后会发布一个更简单的解决方案。以上是关于如何通过格式化数字来设置TextField的字符长度的主要内容,如果未能解决你的问题,请参考以下文章
如何在附加到 TextField 的 swift @Published didSet 中正确格式化字符串?