Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- swiftUI
- 리팩토링
- clean architecture
- combine
- Clean Code
- 리펙터링
- MVVM
- collectionview
- swift documentation
- 스위프트
- Human interface guide
- Observable
- HIG
- UITextView
- Protocol
- ios
- Xcode
- tableView
- rxswift
- RxCocoa
- 클린 코드
- uiscrollview
- 리펙토링
- ribs
- Refactoring
- UICollectionView
- map
- 애니메이션
- SWIFT
- uitableview
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 비밀번호 입력창 커스텀 textField 본문
커스텀 내용
- 오른쪽 버튼에 mask버튼 존재
- mask버튼 탭 시 입력 값 mask
- 텍스트 필드 객체.setupValidStatus() or 객체.setupInvalidStatus()를 실행하여 텍스트 색깔 변경 가능
- 객체.setupInvalidStatus()호출 후 delete하면 입력값 모두 삭제되는 기능
코드 내용
import UIKit
import RxSwift
import RxCocoa
@IBDesignable
class PasswordTextField: UITextField {
enum CurrentPasswordInputStatus {
case invalidPassword
case validPassword
}
private var rightButton: UIButton!
private let bag = DisposeBag()
private var currentPasswordInputStatus: CurrentPasswordInputStatus = .invalidPassword
let textResetEvent = PublishSubject<Void>()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
setupViews()
}
private func setupViews() {
delegate = self
rightButton = UIButton()
rightButton.contentMode = .scaleAspectFit
rightButton.setImage(UIImage(named: "open_eye"), for: .normal)
rightView = rightButton
rightViewMode = .always
leftViewMode = .never
rightButton.rx.tap.asDriver{ _ in .never() }
.drive(onNext: { [weak self] in
self?.updateCurrentStatus()
}).disposed(by: bag)
}
private func updateCurrentStatus() {
isSecureTextEntry.toggle()
if isSecureTextEntry {
rightButton.setImage(UIImage(named: "open_eye"), for: .normal)
} else {
rightButton.setImage(UIImage(named: "close_eye"), for: .normal)
}
}
// MARK: - Public
public func setupValidStatus() {
textColor = .black
currentPasswordInputStatus = .validPassword
}
public func setupInvalidStatus() {
textColor = .red
currentPasswordInputStatus = .invalidPassword
}
}
extension PasswordTextField: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
if string.isEmpty, currentPasswordInputStatus == .invalidPassword {
textField.text = ""
setupValidStatus()
textResetEvent.onNext(())
return false
}
return true
}
}
* source code: github.com/JK0369/Custom_password_TextField
'iOS 응용 (swift)' 카테고리의 다른 글
[iOS - swift] UIView.animate() (0) | 2021.01.09 |
---|---|
[iOS - swift] ContainerViewController, ContentsViewController (0) | 2021.01.09 |
[iOS - swift] vector 이미지 사용하기 (.pdf 형식 파일 이미지, Assets.xcassets) (0) | 2021.01.07 |
[iOS - swift] Codable과 enum을 사용하여 특정 json 문자열 파싱 (0) | 2021.01.07 |
[iOS - swift] OTPFieldView, 인증코드 입력창 (0) | 2021.01.06 |
Comments