8

我有这个正在研究的股票市场计算器,我在 StackOverFlow 上搜索了 Apple 文档、互联网,但没有成功找到答案。

我有一个UITextfield用户将在其中输入货币值。我想要实现的是当用户键入时或至少在他完成键入值之后,文本字段还将显示与他所在的语言环境相对应的货币符号。

它就像一个占位符,但不是我们在 xcode 中的占位符,因为 xcode 在我们输入之前就在那里,而我想要的那个在输入时和之后应该在那里。我可以使用包含货币的背景图像,但我无法本地化应用程序。

因此,如果有人可以提供帮助,我将不胜感激。

提前致谢。

4

2 回答 2

6

你必须使用NSNumberFormatter来实现这一点。

试试下面的代码,通过这个,一旦你输入了值并且当你结束编辑时,这些值将被格式化为当前货币。

-(void)textFieldDidEndEditing:(UITextField *)textField {

    NSNumberFormatter *currencyFormatter = [[[NSNumberFormatter alloc] init] autorelease];
    [currencyFormatter setLocale:[NSLocale currentLocale]];
    [currencyFormatter setMaximumFractionDigits:2];
    [currencyFormatter setMinimumFractionDigits:2];
    [currencyFormatter setAlwaysShowsDecimalSeparator:YES];
    [currencyFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

    NSNumber *someAmount = [NSNumber numberWithDouble:[textField.text doubleValue]];
    NSString *string = [currencyFormatter stringFromNumber:someAmount];

    textField.text = string;
}
于 2012-11-25T14:58:51.313 回答
5

最简单的方法是将带有右对齐文本的标签放在您的文本字段上,该文本字段将具有左对齐文本。

当用户开始编辑文本字段时,设置货币符号:

    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        self.currencyLabel.text = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];
    }

如果您想将其保留为 textField 中文本的一部分,则它会变得有点复杂,因为一旦您将符号放在那里,您就需要防止它们删除:

// Set the currency symbol if the text field is blank when we start to edit.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
    if (textField.text.length  == 0)
    {
        textField.text = [[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol];
    }
}

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *newText = [textField.text stringByReplacingCharactersInRange:range withString:string];

    // Make sure that the currency symbol is always at the beginning of the string:
    if (![newText hasPrefix:[[NSLocale currentLocale] objectForKey:NSLocaleCurrencySymbol]])
    {
        return NO;
    }

    // Default:
    return YES;
}

正如@Aadhira 指出的那样,您还应该使用数字格式化程序来格式化货币,因为您正在向用户显示它。

于 2012-11-25T15:31:49.237 回答