我希望用户在文本字段中输入金额,并且希望将值在输入时进行格式化。这意味着当用户输入第4位数字时,逗号出现在表示数千的适当位置处。例如:3,450在用户输入时格式化文本字段
现在,我试图使用textfield委托方法“shouldChangeCharactersInRange”和NSNumberFormatter。不幸的是我没有取得任何成功。有人能指出我正确的方向吗?谢谢!
我希望用户在文本字段中输入金额,并且希望将值在输入时进行格式化。这意味着当用户输入第4位数字时,逗号出现在表示数千的适当位置处。例如:3,450在用户输入时格式化文本字段
现在,我试图使用textfield委托方法“shouldChangeCharactersInRange”和NSNumberFormatter。不幸的是我没有取得任何成功。有人能指出我正确的方向吗?谢谢!
一种方法是在UITextField
的顶部覆盖带有透明背景的UILabel
。注册成为UITextField
的delegate
和实施:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
然后每次用户类型,该方法将被调用,允许你采取新的价值,将其转换为整数,并使之通过一个NSNumberFormatter ,然后更新UILabel以显示此格式的值。
static NSNumberFormatter *formatter;
- (BOOL)textField:(UITextField *)aTextField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *textFieldValue = [aTextField.text stringByAppendingString:string];
if (range.length > 0)
textFieldValue = [aTextField.text substringToIndex:range.location];
if ([textFieldValue isEqualToString:@""])
self.formattedLabel.text = textFieldValue;
else
{
NSDecimalNumber *newValue = [[NSDecimalNumber alloc] initWithString:textFieldValue];
if (!formatter) formatter = [[NSNumberFormatter alloc] init];
formatter.numberStyle = NSNumberFormatterDecimalStyle;
self.formattedLabel.text = [formatter stringFromNumber:newValue];
}
return YES;
}
感谢您的提示!我尝试使用NSDecimalNumber而不是整数。它可以工作,但是标签只有一个数字。所以如果我点击我的文本字段并输入“3”,标签显示“NaN”。然后如果我输入一个“4”,它会显示3.00美元,等等......我该如何解决这个问题?什么是“NaN?你知道任何其他方式比使用无形标签?谢谢 – serge2487 2011-03-03 23:31:44
尝试使用'字符串''而不是'textField.text'的参数我已经更新了我的例子NaN意味着不是一个数字 – 2011-03-03 23:33:35
嗯,我明白了我的textField现在每次显示一个字符,每当我开始删除时我都会收到NaN – serge2487 2011-03-04 00:46:56
哎呀抱歉。谢谢你让我知道。我不确定整个积分系统是如何工作的。 – serge2487 2011-03-03 05:59:33