부스트코스 프로젝트로 회원가입 화면을 만들다가 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일 경우 텍스트 복사를 비활성화하고 입력되는 문자를 아래 그림처럼 숨겨준다.
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 프로퍼티로 설정해주면 위 그림처럼 구현할 수 있다.
'IOS' 카테고리의 다른 글
[IOS] Notification을 이용하여 여러 클래스에서 데이터 받기 (0) | 2022.02.14 |
---|---|
[IOS] UIModalPresentationStyle의 pageSheet과 formSheet의 차이 (0) | 2022.02.06 |
Timer 객체와 RunLoop에 대하여 (0) | 2022.02.06 |
[IOS] UIImageView의 모서리를 둥글게 만드는 방법 (0) | 2022.01.18 |
[IOS] PHPhotoLibrary의 requestAuthorizaion 메소드 호출 시 발생할 수 있는 이슈 (0) | 2022.01.17 |