2017-09-16 13 views
0

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

目的:私は、私が試みたものを掲載しています。 ●使用のポイントを過ぎても使えない●テキストの長さを決めた後12回フィールドが12以上ある。あなたの質問に答えるには、入力時に番号を表示する必要がありますが、次の番号がタイプのときは●で置き換えてください。長さが12になるまで同じ動作を続け、16桁目までの数字を表示します。

+0

カード番号全体が1文字列ですか?それとも4桁の4桁の文字列ですか? – Alex

+0

カード番号全体が1文字列です。 @Alex –

+0

それは、入力時に文字を表示する必要がありますか遅れてそれを非表示にするか、入力時にアスタリスクを表示するだけですか? –

答えて

0

更新済み:申し訳ありませんが、rmaddyが指摘したとおり、この回答の最初のバージョンは期待通りに機能しませんでした。だからここに私の更新された答えと今は期待どおりに動作します。それは4 * 4 = 16桁で構成されている

let yourString = "1234123412341234" 

はあなたのような例を何かのために、すべてでまだスペースなしで文字列を持っていると言います。

そして、あなたは通常、あなたが間隔シンボルの両方を処理するために、このような何かを行うことができ、自分のクレジットカード番号を入力するために彼らのユーザーを要求するウェブサイト上でそれを見るようにあなたはそれをフォーマットしたいと思います:

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

私は誰かがこの回答をdownvoted理由を知りたいです。 – Alex

+1

コードをプレイグラウンドで実行してみてください。コンパイルするコードを取得しても、依頼されていることは実際にはありません。また、 'string.index(of:)'の使用は、文字列が特定の文字の重複を持つ可能性があるので奇妙です。 – rmaddy

+0

だから、今はコンピュータがなくて、現時点ではチェックできないが、それはうまくいくはずだと言っているのは、まさにその理由だ。私がコードに間違いを犯したとしたら、あなたはそれに気付くことができてうれしいです。私はそれを下ろす代わりに自分の答えを編集できると思います。 :) – Alex

関連する問題