猿问
下载APP

如何使用SWIFT在文本字段(从右到左)输入货币格式?

如何使用SWIFT在文本字段(从右到左)输入货币格式?

我有个号码,比方说0.00.

  • 当用户点击1.我们应该有

    0.01

  • 当用户点击2。我们应该显示

    0.12

  • 当用户点击3。我们应该显示

    1.23

  • 当用户点击4。我们应该显示

    12.34

我怎么才能用斯威夫特做这件事?


精慕HU
浏览 96回答 3
3回答

一只斗牛犬

为SWIFT 3..在文本字段上输入货币格式(从右到左)override func viewDidLoad() {     super.viewDidLoad()     textField.addTarget(self, action: #selector(myTextFieldDidChange), for: .editingChanged)}     func myTextFieldDidChange(_ textField: UITextField) {     if let amountString = textField.text?.currencyInputFormatting() {         textField.text = amountString    }}extension String {     // formatting text for currency textField    func currencyInputFormatting() -> String {         var number: NSNumber!         let formatter = NumberFormatter()         formatter.numberStyle = .currencyAccounting         formatter.currencySymbol = "$"         formatter.maximumFractionDigits = 2         formatter.minimumFractionDigits = 2         var amountWithPrefix = self         // remove from String: "$", ".", ","        let regex = try! NSRegularExpression(pattern:          "[^0-9]", options: .caseInsensitive)         amountWithPrefix = regex.stringByReplacingMatches(in: amountWithPrefix, options:          NSRegularExpression.MatchingOptions(rawValue: 0), range: NSMakeRange(0, self.characters.count), withTemplate: "")         let double = (amountWithPrefix as NSString).doubleValue         number = NSNumber(value: (double / 100))         // if first number is 0 or all numbers were deleted        guard number != 0 as NSNumber else {             return ""         }         return formatter.string(from: number)!     }}

动漫人物

您可以创建一个货币文本字段子类UITextField。为UIControlEvents添加一个目标。添加选择器方法来筛选文本框字符串中的数字。在过滤了字符串中的所有非数字之后,您可以使用NumberFor事宜再次格式化您的数字,如下所示:SWIFT 5或更高版本class&nbsp;CurrencyField:&nbsp;UITextField&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;string:&nbsp;String&nbsp;{&nbsp;return&nbsp;text&nbsp;??&nbsp;""&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;decimal:&nbsp;Decimal&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;string.decimal&nbsp;/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pow(10,&nbsp;Formatter.currency.maximumFractionDigits) &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;decimalNumber:&nbsp;NSDecimalNumber&nbsp;{&nbsp;return&nbsp;decimal.number&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;doubleValue:&nbsp;Double&nbsp;{&nbsp;return&nbsp;decimalNumber.doubleValue&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;integerValue:&nbsp;Int&nbsp;{&nbsp;return&nbsp;decimalNumber.intValue&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;maximum:&nbsp;Decimal&nbsp;=&nbsp;999_999_999.99 &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;var&nbsp;lastValue:&nbsp;String? &nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;func&nbsp;willMove(toSuperview&nbsp;newSuperview:&nbsp;UIView?)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;you&nbsp;can&nbsp;make&nbsp;it&nbsp;a&nbsp;fixed&nbsp;locale&nbsp;currency&nbsp;if&nbsp;needed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Formatter.currency.locale&nbsp;=&nbsp;Locale(identifier:&nbsp;"pt_BR") &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;or&nbsp;"en_US",&nbsp;"fr_FR",&nbsp;etc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addTarget(self,&nbsp;action:&nbsp;#selector(editingChanged),&nbsp;for:&nbsp;.editingChanged) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyboardType&nbsp;=&nbsp;.numberPad &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;textAlignment&nbsp;=&nbsp;.right &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editingChanged() &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;func&nbsp;deleteBackward()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;string.digits.dropLast().string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;editingChanged() &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@objc&nbsp;func&nbsp;editingChanged()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;guard&nbsp;decimal&nbsp;<=&nbsp;maximum&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;lastValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;Formatter.currency.string(for:&nbsp;decimal) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastValue&nbsp;=&nbsp;text&nbsp;&nbsp;&nbsp;&nbsp;}}扩展NumberFormat{便利性init(number Style:Style){Self.init()Self.number Style=number Style}extension&nbsp;Formatter&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;let&nbsp;currency&nbsp;=&nbsp;NumberFormatter(numberStyle:&nbsp;.currency)}extension&nbsp;String&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;digits:&nbsp;String&nbsp;{&nbsp;return&nbsp;filter&nbsp;{&nbsp;$0.isWholeNumber&nbsp;}&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;decimal:&nbsp;Decimal&nbsp;{&nbsp;return&nbsp;Decimal(string:&nbsp;digits)&nbsp;??&nbsp;0&nbsp;}}extension&nbsp;Decimal&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;number:&nbsp;NSDecimalNumber&nbsp;{&nbsp;return&nbsp;NSDecimalNumber(decimal:&nbsp;self)&nbsp;}}extension&nbsp;LosslessStringConvertible&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;string:&nbsp;String&nbsp;{&nbsp;return&nbsp;.init(self)&nbsp;}}

桃花长相依

试试这段代码:struct&nbsp;DotNum&nbsp;{ &nbsp;&nbsp;private&nbsp;var&nbsp;fraction:String&nbsp;=&nbsp;"" &nbsp;&nbsp;private&nbsp;var&nbsp;intval:String&nbsp;=&nbsp;"" &nbsp;&nbsp;init()&nbsp;{} &nbsp;&nbsp;mutating&nbsp;func&nbsp;enter(s:String)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;count(fraction)&nbsp;<&nbsp;2&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fraction&nbsp;=&nbsp;s&nbsp;+&nbsp;fraction&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intval&nbsp;=&nbsp;s&nbsp;+&nbsp;intval&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} &nbsp;&nbsp;private&nbsp;var&nbsp;sFract:String&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;count(fraction)&nbsp;==&nbsp;0&nbsp;{&nbsp;return&nbsp;"00"&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;count(fraction)&nbsp;==&nbsp;1&nbsp;{&nbsp;return&nbsp;"0\(fraction)"&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fraction&nbsp;&nbsp;} &nbsp;&nbsp;var&nbsp;stringVal:String&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;intval&nbsp;==&nbsp;""&nbsp;&nbsp;{&nbsp;return&nbsp;"0.\(sFract)"&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;"\(intval).\(sFract)" &nbsp;&nbsp;}}var&nbsp;val&nbsp;=&nbsp;DotNum()val.enter("1")val.stringVal val.enter("2")val.stringVal val.enter("3")val.stringVal val.enter("4")val.stringVal
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答