4

私はこれに対する解決策を見つけようとしています。価格(XXX、XXX.XX)としてUITextFieldを書式設定

単純にUITextFieldが、入力された数値を価格として正しくフォーマットするようにします。これは、1つの小数点しか許されていないことを意味し、ポイントの後ろ2桁(入力された場合)と '、'で大数(例えば15万)を区切ります。

これは価格が適切にフォーマットされている理由ですが、なぜそれが正しいのはなぜ難しいですか?

解決策に最も近いのはthis codeです。しかし、その問題は、4桁の数字を入力した後に0に戻ってしまうことです。これは解決策に近いですが、私はなぜこの奇妙な動作をするのか理解できません。

+0

簡単な質問:ユーザーが入力したとき、またはenter/nextを押したときに変更しますか? – Can

+0

ユーザーが変更している(リアルタイム)。 –

答えて

1

実際にはこれのためのコードは必要ありません。 nibファイルのテキストフィールドに数値フォーマッタをドラッグし、 "通貨"スタイルを使用するように設定してください。コード経由

これは[myNumberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle]

価格の形式は、ロケールに応じて非常に異なっていることに注意してくださいだろう。例えばドイツでは、ドットは桁区切り文字として使用され、カンマは小数点として使用されます。これらの相違点は、固定形式の代わりにスタイルを使用して処理します。

+0

Errドラッグする数値フォーマッタはどこにありますか?私はそれを見ない?第2に、shouldChangeCharactersInRangeが発生したときに番号を更新しますか? –

+0

フォーマット番号が「ライブ」に更新されるという要件がありませんでした。この場合、私の答えはあなたを助けません、申し訳ありません。 – omz

0

こんにちは私の解決策です。あなたのViewController

012で

import UIKit 


extension Numeric { // for Swift 3 use FloatingPoint or Int 

    func currency(locale: String, symbol: Bool = true) -> String { 
     let formatter = NumberFormatter() 
     formatter.numberStyle = .currency 
     formatter.locale = Locale(identifier: locale) 
     if !symbol { 
      formatter.currencySymbol = "" 
     } 
     let result = formatter.string(for: self) ?? "" 

     return result 
    } 

} 

のViewControllerコード

var price: String! 
var priceNumber: CGFloat! 
@IBOutlet weak var priceInput: UITextField! 

のviewDidLoad

priceInput.addTarget(self, action: #selector(priceInputChanged), for: .editingChanged) 
priceInput.tintColor = .clear 

priceInput.delegate = self 

UITextFieldDelegate

That's It

関連する問題