使用Swift格式化Textfields中的数字

时间:2014-06-12 20:30:33

标签: xcode uitextfield swift ios8

我正在尝试将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或我如何修复代码?

3 个答案:

答案 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
        }
    }
}