Формат валюты UITextField слева направо - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу отформатировать свой UITextField, указав $ слева при вводе суммы.

Пока что мой код делает, когда я ввожу, пусть говорит, что $5.65 это то, как он вводится: $0.05 -> $0.56 -> $5.65

Я хочу, чтобы это было не справа налево, а слева направо, вот так: $5 -> $5. -> $5.6 -> $5.65

Но я хочу ограничить его только двумя десятичными знаками, знак доллара находится слева, и вы не можете вводить любые другие символы (например:!, @, #,$,%, ^, A-Z ')

Это то, что у меня сейчас:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let text: NSString = (textField.text ?? "") as NSString
    let finalString = text.replacingCharacters(in: range, with: string)

    // 'currency' is a String extension that doews all the number styling
    amuTextField.text = finalString.currency

    // returning 'false' so that textfield will not be updated here, instead from styling extension
    return false
}

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))

    return formatter.string(from: number)!
}
...