2016-09-12 69 views
0

我希望用戶在從numberPad(不帶小數點)的文本字段中輸入時看到$和逗號。以前我得到了幫助並使用了下面的代碼。但客戶端不會鍵入小數(僅限Int值)。

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { 
    let oldText = textField.text! as NSString 
    var newText = oldText.stringByReplacingCharactersInRange(range, withString: string) as NSString! 
    var newTextString = String(newText) 

    let digits = NSCharacterSet.decimalDigitCharacterSet() 
    var digitText = "" 
    for c in newTextString.unicodeScalars { 
     if digits.longCharacterIsMember(c.value) { 
      digitText.append(c) 
     } 
    } 

    let formatter = NSNumberFormatter() 
    //  formatter.usesSignificantDigits = false 
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle 
    formatter.locale = NSLocale(localeIdentifier: "en_US") 
    let numberFromField = (NSString(string: digitText).doubleValue)/100 

    newText = formatter.stringFromNumber(numberFromField) 

    textField.text = String(newText) 

    return false 

} 

打字的時候,它總是從第二個小單元開始,如何通過編輯代碼刪除」 .00" ,讓它從單元開始?我嘗試了很長時間,預先感謝。

回答

1

首先,你有一些不好的建議。您不應該使用shouldChangeCharactersInRange更改文本字段中的字符。這是爲了檢查輸入的字符是否對字段有效。如果用戶輸入數字或刪除,則此方法中唯一應該執行的操作是返回true,否則返回false。 (請記住,用戶可能正在使用外部鍵盤,因此只需將鍵盤拉起就不足以停止非數字輸入。)

相反,您應該使用連接到該字段的EditingChanged事件的@IBAction。在這個方法裏面你應該更新文本。

@IBAction func editingChanged(sender: UITextField) { 
    let digits = sender.text?.digitsOnly ?? "0" 
    sender.text = "$\(digits).00" // If I understand what you want. 
} 

下面的擴展名應該在代碼庫中的某處。它通常很有用,因此將其存儲在要點或其他內容中,您將來可能需要它。

extension String { 
    var digitsOnly: String { 
     return componentsSeparatedByCharactersInSet(NSCharacterSet.decimalDigitCharacterSet().invertedSet).joinWithSeparator("") 
    } 
} 

你必須確保該IBAction爲連接到EditingChanged事件:

enter image description here

+0

我想,當用戶鍵入「1234」,在文本框將顯示「$ 1」 - >「$ 12」 - >「$ 123」 - >「$ 1,234」 – user6702783

+0

Ahh,然後查看此q/a:http://stackoverflow.com/questions/11787759/how-to-properly-format-currency-on-ios只需從答案中用'numberAsString'替換上面的''$ \(digits).00「'。 –

+0

嗨,我試過你的解決方案,問題是當我編輯時,逗號不會立即添加。它只有在我完成編輯時纔會出現。但這不是我想要的。 – user6702783

相關問題