如何在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位的数字。

+0

整个卡号是一串吗?或者它是由4位数组成的4个不同的字符串? – Alex

+0

整个卡号是一个字符串。 @Alex –

+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

请让我知道如果您有任何问题!

+0

我很想知道为什么有人低估了这个答案。 – Alex

+1

尝试在操场上运行你的代码。甚至一旦你得到了编译的代码,它并没有真正处理被问到的内容。而你使用'string.index(of:)'是很奇怪的,因为字符串可能有某些字符的重复。 – rmaddy

+0

因此,这就是为什么我花时间说我现在没有电脑,现在无法检查它,但它“应该”工作。如果我在代码中犯了什么错误,那么我很高兴你能注意到它,我认为你可以编辑我的答案而不是低估它,因为我的意思是,这不是真的有效,而且这也没有任何帮助。 :) – Alex