如何在swift中部分掩盖UITextField文本?

时间:2017-09-16 01:39:36

标签: ios swift uitextfield

--------------------
| **** **** **** 1234 |
--------------------

正如您所知,我试图部分掩盖用户在UITextField中键入的卡号的前12位数字。我花了很多时间来弄清楚如何将数字分成4块。现在我要采取的挑战是使用安全入口样式掩码掩盖前12位数字。

非常感谢任何帮助。谢谢。

编辑:
添加我到目前为止尝试过的代码:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    guard let text = textField.text else {
        return true
    }
    //@"●"
    let lastText = (text as NSString).replacingCharacters(in: range, with: string) as String
    if txtCardNumber.text?.characters.count >= 12 {
        txtCardNumber.text = "●●●● ●●●● ●●●●" // + String()
        return true
    }
    return true
}

目标:我发布了我的尝试。在确定textField的长度超过12之后,无法超过使用●12次。坚持到这里。要回答您的问题,它需要在键入时显示数字,但在下一个数字类型时替换为●。继续相同的行为,直到长度为12,然后显示从那里到第16位的数字。

1 个答案:

答案 0 :(得分:0)

更新:对不起,但是这个答案的第一个版本并没有像我预期的那样有效,正如rmaddy指出的那样。所以这是我更新的答案,现在它按预期工作。

假设你有一个完全没有空格的字符串,例如:

let yourString = "1234123412341234"

它由4 * 4 = 16位数组成。

并且您希望将其格式化为您通常在要求其用户键入其信用卡号的网站上看到的格式,然后您可以执行此类操作来处理符号的间距:

let yourString = "1234123412341234"
var resultString = String()

// Loop through all the characters of your string

yourString.characters.enumerated().forEach { (index, character) in

    // Add space every 4 characters

    if index % 4 == 0 && index > 0 {
        resultString += " "
    }

    if index < 12 {

        // Replace the first 12 characters by *

        resultString += "*"

    } else {

        // Add the last 4 characters to your final string

        resultString.append(character)
    }

}

print(resultString)

你会得到**** **** **** 1234

如果您有任何疑问,请与我们联系!