为UITextField每3个字符添加一个字符

时间:2018-02-04 13:44:48

标签: ios swift uitextfield nsstring

我尝试在用户每三个字符输入时添加一个字符,例如用户类型:Map<String, Object>它应自动更改为123456789。如何在

中添加字符
123,456,789

2 个答案:

答案 0 :(得分:2)

以下是如何做到这一点:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    var proposedString = (textField.text as NSString?)!.replacingCharacters(in: range, with: string)

    // do whatever modifications you need to do, e.g. remove commas:
    proposedString = proposedString.replacingOccurrences(of: ",", with: "")
    let modulo = proposedString.count % 3
    for index in stride(from: modulo, to: proposedString.count, by: 3).reversed() {
        print(index)
        if index != 0 {
            proposedString.insert(",", at: proposedString.index(proposedString.startIndex, offsetBy: index))
        }
    }

    // manually set the new value
    textField.text = proposedString

    // don't let it update itself
    return false
}

注意:我的这个小算法只使用逗号 - 因此您应该使用Localedocs)或NumberFormatter添加逗号( docs)如果逗号是您所在国家/地区的号码的一部分。

答案 1 :(得分:1)

您应该考虑到世界各地的不同地区使用不同的格式化数字的方式。为了解决这个问题,让iOS为您进行格式化。

事实证明这非常简单。您需要的一行代码是:

NumberFormatter.localizedString(from: 123456 as NSNumber, number: NumberFormatter.Style.decimal)