1

我希望用户在文本字段中输入金额,并且希望将值在输入时进行格式化。这意味着当用户输入第4位数字时,逗号出现在表示数千的适当位置处。例如:3,450在用户输入时格式化文本字段

现在,我试图使用textfield委托方法“shouldChangeCharactersInRange”和NSNumberFormatter。不幸的是我没有取得任何成功。有人能指出我正确的方向吗?谢谢!

+0

哎呀抱歉。谢谢你让我知道。我不确定整个积分系统是如何工作的。 – serge2487 2011-03-03 05:59:33

回答

4

一种方法是在UITextField的顶部覆盖带有透明背景的UILabel。注册成为UITextFielddelegate和实施:

- (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; 
} 
+0

感谢您的提示!我尝试使用NSDecimalNumber而不是整数。它可以工作,但是标签只有一个数字。所以如果我点击我的文本字段并输入“3”,标签显示“NaN”。然后如果我输入一个“4”,它会显示3.00美元,等等......我该如何解决这个问题?什么是“NaN?你知道任何其他方式比使用无形标签?谢谢 – serge2487 2011-03-03 23:31:44

+0

尝试使用'字符串''而不是'textField.text'的参数我已经更新了我的例子NaN意味着不是一个数字 – 2011-03-03 23:33:35

+0

嗯,我明白了我的textField现在每次显示一个字符,每当我开始删除时我都会收到NaN – serge2487 2011-03-04 00:46:56