在 UITextField 中添加逗号作为用户类型的数值
Posted
技术标签:
【中文标题】在 UITextField 中添加逗号作为用户类型的数值【英文标题】:Adding commas to number values as user types in the UITextField 【发布时间】:2016-12-16 06:22:31 【问题描述】:我对@987654321@ 使用了一种更改方法,我想在用户输入数字时格式化UITextField
。就像我希望数字被实时格式化一样。我希望将 1000 更改为 1,000、50000 更改为 50,000 等等。
我的问题是我的UITextField
值没有按预期更新。例如,当我在UITextField
中输入 50000 时,结果返回为 5,0000 而不是 50,000。这是我的代码:
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
//check if any numbers in the textField exist before editing
guard let textFieldHasText = (textField.text), !textFieldHasText.isEmpty else
//early escape if nil
return true
let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
//remove any existing commas
let textRemovedCommma = textFieldHasText.replacingOccurrences(of: ",", with: "")
//update the textField with commas
let formattedNum = formatter.string(from: NSNumber(value: Int(textRemovedCommma)!))
textField.text = formattedNum
return true
【问题讨论】:
***.com/questions/24115141/… 【参考方案1】:shouldChangeCharactersIn
的第 1 条规则 - 如果将值分配给文本字段的 text
属性,则必须返回 false
。返回true
告诉文本字段对您已经修改的文本进行原始更改。这不是你想要的。
您的代码中还有另一个重大缺陷。它不适用于使用其他方式格式化更大数字的语言环境。并非所有语言环境都使用逗号作为组分隔符。
【讨论】:
谢谢 - 我没有意识到我错误地使用了真/假返回。并感谢您发现语言环境问题。我会尝试解决这个问题,我会报告!【参考方案2】:尝试使用 NSNumberFormatter。
var currencyFormatter = NumberFormatter()
currencyFormatter.usesGroupingSeparator = true
currencyFormatter.numberStyle = .currency
// localize to your grouping and decimal separator
currencyFormatter.locale = NSLocale.current
var priceString = currencyFormatter.string(from: 9999.99)
它会打印出类似 = "$9,999.99"
的值您也可以根据需要设置Locale。
【讨论】:
【参考方案3】:let formatter = NumberFormatter()
formatter.numberStyle = NumberFormatter.Style.decimal
let textRemovedCommma = textField.text?.replacingOccurrences(of: ",", with: "")
let formattedNum = formatter.string(from: NSNumber(value: Int(textRemovedCommma!)!))
textField.text = formattedNum
【讨论】:
你好!虽然此代码 sn-p 可能是解决方案,但including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案4】:不要使用小数样式,而是使用货币样式。如果不需要,也设置currencySymbol 空字符串。还要确保您的设备区域选择为印度,否则它将在 3 位而不是 2 位后添加逗号。
-(NSString*)addingCommasToFloatValueString:(NSString *)rupeeValue
NSNumber *aNumber = [NSNumber numberWithDouble:[rupeeValue doubleValue]];
NSNumberFormatter *aFormatter = [NSNumberFormatter new];
[aFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
[aFormatter setCurrencySymbol:@""];
[aFormatter setMinimumFractionDigits:0];
[aFormatter setMaximumFractionDigits:2];
NSString *formattedNumber = [aFormatter stringFromNumber:aNumber];
return formattedNumber;
【讨论】:
以上是关于在 UITextField 中添加逗号作为用户类型的数值的主要内容,如果未能解决你的问题,请参考以下文章
添加 UITextField 作为 UITableViewCell 的子视图在 IOS 6 中工作正常,但在 IOS 7 中它不起作用?
将占位符添加到 UITextField,如何以编程方式快速设置占位符文本?