2017-09-16 107 views
0

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

那麼它是否需要在輸入字符時顯示字符,並且在延遲後隱藏它或僅在鍵入時顯示星號? –

回答

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