2017-09-16 4 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

전체 카드 번호가 하나의 문자열입니까? 아니면 4 자리 숫자로 구성된 4 개의 다른 문자열입니까? – Alex

+0

전체 카드 번호는 하나의 문자열입니다. @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

그래서 정확하게 컴퓨터가 없으며 지금은 확인할 수 없지만 작동해야한다고 말한 것은 정확하게 그 이유입니다. 만약 내가 코드에서 실수를했다면, 나는 당신이 그것을 알아 차리게되어 기쁘다. 그리고 나는 당신이 내 대답을 downvoting 대신 편집 할 수 있다고 생각한다. 왜냐하면 내 말은, 그것은 정말로 constrctive하지 않고 어떤 식으로도 도움이되지 않기 때문이다. :) – Alex

관련 문제