UITextField를 이용해 비밀번호 입력 칸 만들기
IOS

UITextField를 이용해 비밀번호 입력 칸 만들기

부스트코스 프로젝트로 회원가입 화면을 만들다가 UITextField로 패스워드 입력 창을 구현하는데, 키보드로 문자를 입력하면 문자가 보이지 않게 감춰지는 기능을 가진 텍스트 필드를 만들어본다.


func addPwTextField() {

        let textfield: UITextField = UITextField()
        
        self.view.addSubview(textfield)
        
        textfield.placeholder = "Password"
        textfield.isSecureTextEntry = true
        textfield.textContentType = .oneTimeCode
        
 }

위 코드에서 눈여겨봐야 할 것은 2가지다.

  • isSecureTextEntry
  • textContentType

isSecureTextEntry는 기본적으로 값이 false이지만, true일 경우 텍스트 복사를 비활성화하고 입력되는 문자를 아래 그림처럼 숨겨준다.

isSecureTextEntry가 true일 때

 

textContentType는 UITextContentType 객체로서, 텍스트가 입력되는 영역의 콘텐츠가 가지는 의미를 정의한다. 구조체로 선언돼있고 이 타입을 가진 다른 프로퍼티들을 함께 보면 조금 더 이해하기 쉽다. 우리가 사용하려고 하는 용도에 맞는 프로퍼티는 언뜻 보기에 2가지 정도로 보인다.

  • UITextContentType.password
  • UITextContentType.newPassword

개발자 문서에도 패스워드가 입력되는 콘텐츠 공간을 정의하는 프로퍼티라고 돼있다. 그런데 password 프로퍼티로 설정해줄 경우 IOS 12 이후부터는 아래와 같은 오류 메시지가 뜨면서 키보드 입력이 되지 않는다.

[AutoFill] Cannot show Automatic Strong Passwords for app bundleID: lieutenantK.SignUp due to error: iCloud Keychain is disabled

IOS 12이후 부터 생긴 비밀번호를 위한 강력한 암호를 추천해주는 기능 때문인데, 이 기능이 iCloud의 키체인(한 번 입력한 비밀번호를 기억할 필요 없이 저장해놓는 기능)과 연동이 돼있어서 오류 메시지를 출력하는 것 같다. (시뮬레이터가 아닌 실제 스마트폰으로 실행하면 정상작동할지도..?)

 

하지만 만약 암호 추천 기능을 사용하지 않고 사용자가 패스워드를 모두 입력하게 하고 싶다면 UITextContentType.oneTimeCode 프로퍼티로 설정해주면 위 그림처럼 구현할 수 있다.