2014-06-12 48 views
2

我正在嘗試使用逗號將其從UITextfield中的數字格式化爲小數點後的數字。在使用Swift的文本字段中格式化數字

我已經這樣做了下面的代碼:

@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格式到4000,然後如果我鍵入另一個數字,如8重新格式化爲48.

是否有另一種方式,我可以通過IB格式化,或者我可以如何修復代碼?

回答

3

替換行:

var textFieldText = theTextField.text.stringByReplacingOccurrencesOfString(",", withString: "", options: NSStringCompareOptions.RegularExpressionSearch, range: Range(start: theTextField.text.startIndex, end: theTextField.text.endIndex)) 

(我只去掉了雙引號之間的空間)。

事實是,NSNumberFormatter不喜歡字符串中添加的空格。

之後工作正常。

0

我知道我遲到了派對,但這對我很好。

var phoneNumber = " 1 (888) 555-5551 " 

var strippedPhoneNumber = "".join(phoneNumber.componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet)) 

它取出空格並去掉非十進制數字字符。

最終的結果是「1888555551」

0

我已經更新了這個答案迅速的最新版本。這從上面兩個答案中借用了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 
     } 
    } 
} 
+0

這將是一個完整的解決方案,如果你已經添加了如何調用該方法來簡化那些尋找快速解決方案的人的工作,而不必看別的地方,特別是初學者。 – nyxee

+0

如果你已經增加了如何調用這個方法來簡化那些尋找快速解決方案的工作,而不必看別的地方,那麼這將是一個完整的解決方案,尤其是初學者。但是,這兩個工作:'textField.addTarget(自我,行動​​:#選擇器(PostPaymentViewController.textFieldDidChangeCommas(_ :)),爲:.editingChanged)和#Field.addTarget(自我,行動​​:#選擇器(ViewController。 textFieldDidChangeCommas),用於:.editingChanged)。請有人可以簡要解釋一下。 – nyxee

相關問題