2016-09-12 13 views
0

numberPad(小数点なし)からテキストフィールドに入力するときに$とカンマを表示するようにします。以前は助けを得てコードを使用していました。しかし、クライアントは10進数を入力しません(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 

} 

入力するとき、それは常にどのようにコードを編集を経て、「0.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

ああ、このq/aをチェックしてください:http://stackoverflow.com/questions/11787759/how-to-properly-format-currency-on-ios上記の '$ \(digits).00"を答えから 'numberAsString'に置き換えてください。 –

+0

こんにちは、私はあなたのソリューションを試して、問題は私が編集しているとき、カンマはすぐに追加されません。私は編集を終えたときにのみ表示されます。しかし、それは私が欲しいものではありません。 – user6702783

関連する問題