我正在尝试将UITextfield
中的数字格式化为带有逗号的小数。
我使用以下代码完成了此操作:
@IBAction func editingDidBegin(sender : AnyObject)
{
costField.addTarget(self, action: Selector("textFieldDidChange:"), forControlEvents: UIControlEvents.EditingChanged)
}
func textFieldDidChange(theTextField:UITextField) -> Void
{
var textFieldText = theTextField.text.stringByReplacingOccurrencesOfString(",", withString: " ", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: theTextField.text.startIndex, end: theTextField.text.endIndex))
var formatter:NSNumberFormatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
var formattedOutput = formatter.stringFromNumber(textFieldText.bridgeToObjectiveC().integerValue)
costField.text = formattedOutput
}
这个问题是,在输入四位数之后,删除逗号之后的所有内容。例如,如果我输入4000,它格式化为4,000,那么如果我输入另一个数字,如8,则重新格式化为48。
我是否有其他方式可以格式化,可能通过IB或我如何修复代码?
答案 0 :(得分:3)
将该行替换为:
var textFieldText = theTextField.text.stringByReplacingOccurrencesOfString(",", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: theTextField.text.startIndex, end: theTextField.text.endIndex))
(我只删除了双引号之间的空格)。
事实上,NSNumberFormatter不喜欢字符串中添加的空格。
之后工作正常。
答案 1 :(得分:0)
我知道我迟到了,但这对我很有用。
var phoneNumber = " 1 (888) 555-5551 "
var strippedPhoneNumber = "".join(phoneNumber.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet))
取出空格并去除非十进制数字字符。
最终结果是“1888555551”
答案 2 :(得分:0)
我已将此答案更新为最新版本的swift。这样可以从上面的两个答案中借用90%,但是当文本字段被清除时,也会从文本字段中出现零例外。
func textFieldDidChangeCommas(theTextField:UITextField) -> Void
{
if theTextField.text != nil {
var textFieldText = theTextField.text!.stringByReplacingOccurrencesOfString(",", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: theTextField.text!.startIndex, end: theTextField.text!.endIndex))
var formatter:NSNumberFormatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
if textFieldText != "" {
var formattedOutput = formatter.stringFromNumber(Int(textFieldText)!)
costField.text = formattedOutput
}
}
}