当前位置: 首页 > 面试题库 >

输入时在Swift中的文本字段中设置货币格式

越健
2023-03-14
问题内容

我正在尝试在用户输入时在Swift的文本字段中格式化货币输入。

到目前为止,我只能在用户完成输入后才能成功格式化它:

@IBAction func editingEnded(sender: AnyObject) {

    let formatter = NSNumberFormatter()
    formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
    formatter.locale = NSLocale(localeIdentifier: "en_US")
    var numberFromField = NSString(string: textField.text).doubleValue

    textField.text = formatter.stringFromNumber(numberFromField)
}

但是,我希望在用户输入货币后立即对其进行格式化。当我尝试在TextField操作“ Edited Changed”或“ Value
Changed”上执行此操作时,我只能输入1个数字(如果输入8,则变为$ 8.00),但是一旦输入第二个数字,所有内容将变为$ 0.00,不能超出此范围。

有什么建议?我觉得这应该很容易解决,但我不太了解。


问题答案:

我从今天早些时候开始修改了该功能。非常适合“ en_US”和“ fr_FR”。但是,对于“
ja_JP”,用100除以创建小数是一个问题。您将需要有一个switch或if /
else语句,该语句用小数点分隔货币和用格式化程序格式化时不包含小数的货币。但是我认为这可以让您进入想要成为的空间。

import UIKit

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!
    var currentString = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        self.textField.delegate = self
    }

    //Textfield delegates
    func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool { // return NO to not change text

        switch string {
        case "0","1","2","3","4","5","6","7","8","9":
            currentString += string
            println(currentString)
            formatCurrency(string: currentString)
        default:
            var array = Array(string)
            var currentStringArray = Array(currentString)
            if array.count == 0 && currentStringArray.count != 0 {
                currentStringArray.removeLast()
                currentString = ""
                for character in currentStringArray {
                    currentString += String(character)
                }
                formatCurrency(string: currentString)
            }
        }
        return false
    }

    func formatCurrency(#string: String) {
        println("format \(string)")
        let formatter = NSNumberFormatter()
        formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
        formatter.locale = NSLocale(localeIdentifier: "en_US")
        var numberFromField = (NSString(string: currentString).doubleValue)/100
        textField.text = formatter.stringFromNumber(numberFromField)
        println(textField.text )
    }
}


 类似资料:
  • 问题内容: 我有一个数字可以说。 当用户点击1.时,我们应该 当用户点击2时,我们应该显示 当用户点击3时,我们应该显示 当用户点击4时,我们应该显示 我该如何用Swift做到这一点? 问题答案: 对于 Swift 3 。在文本字段上输入货币格式(从右到左)

  • null 请帮我查一下上面的货币格式。

  • 问题内容: 我想在开始时有一个文本输入字段,其中包含“ $”符号,无论对该字段进行什么编辑,以使该符号保持不变。 如果只接受数字作为输入,我会很好,但这只是一个幻想。 问题答案: 考虑使用无边界输入字段周围带有边框的跨度来模拟具有固定前缀或后缀的输入字段。这是一个基本的启动示例:

  • 我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF

  • 问题内容: 我正在尝试使用http://jquerypriceformat.com/为欧盟货币字段创建输入掩码 到目前为止,在我的指令中,输入已正确应用掩码并正确显示给用户,但是我相信这是有问题的,因为POST值是以奇怪的格式发送的,这与我们在输入字段中看到的完全不同。 我包括priceformat.js 在角度上: 我的输入正确显示了带有掩码的值,但是在POST数据(用角度表示)上,它是一个不同

  • 可能的重复: 在jasper report中将字符串格式化为货币格式 我正在使用JasperReports创建一个发票文档,该文档需要本地化并支持多种货币。 好吧,我终于想通了,但既然国防部锁定了这个问题,应该是重复的--但它不是...不管怎样,这里有一个答案: