如何在swift中部分掩盖UITextField文本?
问题描述:
--------------------
|
**** **** **** 1234 |
--------------------
如何在swift中部分掩盖UITextField文本?
正如你所知道的,我想部分屏蔽卡号的前12位数字,用户类型为UITextField
。我花了很多时间来弄清楚如何将数字分成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位的数字。
答
更新:很抱歉,如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
请让我知道如果您有任何问题!
整个卡号是一串吗?或者它是由4位数组成的4个不同的字符串? – Alex
整个卡号是一个字符串。 @Alex –
那么它是否需要在输入字符时显示字符,并且在延迟后隐藏它或仅在键入时显示星号? –