0

用戶類型我使用的改變的方法,其中this我想格式化UITextField當用戶在數打字。正如我想要的數字是現場格式。我期待將1000到1000,50000到50000等等。添加逗號數值作爲的UITextField

我的問題是,作爲我的預期值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 
} 
+0

http://stackoverflow.com/questions/24115141/swift-converting-string-to-int/34294660?s=1|0.1034#34294660 –

回答

2

規則號shouldChangeCharactersIn 1 - 如果你分配一個值的文本字段的text屬性,你必須返回false。返回true會通知文本字段對您已修改的文本進行原始更改。這不是你想要的。

你的代碼中還有一個其他的重大缺陷。它不適用於使用其他方式格式化大數字的語言環境。並非所有語言環境都使用逗號作爲組分隔符。

+0

謝謝 - 我不知道我用的是真實的/錯誤返回錯誤。並感謝趕上現場問題。我會盡力解決這個問題,我會報告回來! – Sami

1

嘗試使用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」

您還可以設置語言環境根據自己的需要。

0
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 
+0

嘿!儘管此代碼片段可能是解決方案,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – wing