diff --git a/Demo/CustomItemView/CircleItemView.swift b/Demo/CustomItemView/CircleItemView.swift index bfb419d..234ba24 100644 --- a/Demo/CustomItemView/CircleItemView.swift +++ b/Demo/CustomItemView/CircleItemView.swift @@ -10,6 +10,8 @@ import UIKit import PinCodeInputView final class CircleItemView: UIView, ItemType { + var isSecureText: Bool = false + var text: Character? = nil { didSet { diff --git a/Demo/CustomItemView/PasswordItemView.swift b/Demo/CustomItemView/PasswordItemView.swift index add01e4..73dc1c5 100644 --- a/Demo/CustomItemView/PasswordItemView.swift +++ b/Demo/CustomItemView/PasswordItemView.swift @@ -10,6 +10,9 @@ import UIKit import PinCodeInputView final class PasswordItemView: UIView, ItemType { + + var isSecureText: Bool = false + var text: Character? = nil { didSet { diff --git a/Demo/CustomItemView/UnderlineItemView.swift b/Demo/CustomItemView/UnderlineItemView.swift index 902b3ab..a016553 100644 --- a/Demo/CustomItemView/UnderlineItemView.swift +++ b/Demo/CustomItemView/UnderlineItemView.swift @@ -10,6 +10,8 @@ import UIKit import PinCodeInputView final class UnderlineItemView: UIView, ItemType { + var isSecureText: Bool = false + var text: Character? = nil { didSet { diff --git a/Demo/ViewController.swift b/Demo/ViewController.swift index 1b68c73..742fa4f 100644 --- a/Demo/ViewController.swift +++ b/Demo/ViewController.swift @@ -18,7 +18,8 @@ class ViewController: UIViewController { itemFactory: { return ItemView() }, - autoresizes: true) + autoresizes: true, + isSecureText: true) // customize item view (underline) // let pinCodeInputView: PinCodeInputView = .init( diff --git a/PinCodeInputView/ItemType.swift b/PinCodeInputView/ItemType.swift index 420232e..5ad612d 100644 --- a/PinCodeInputView/ItemType.swift +++ b/PinCodeInputView/ItemType.swift @@ -12,5 +12,6 @@ public protocol ItemType { var text: Character? { get set } var isHiddenCursor: Bool { get set } + var isSecureText: Bool {get set} func set(appearance: ItemAppearance) } diff --git a/PinCodeInputView/ItemView.swift b/PinCodeInputView/ItemView.swift index 21f5968..a6466cd 100644 --- a/PinCodeInputView/ItemView.swift +++ b/PinCodeInputView/ItemView.swift @@ -19,7 +19,7 @@ public class ItemView: UIView, ItemType { label.text = nil return } - label.text = String(text) + label.text = isSecureText ? "*" : String(text) } } @@ -33,6 +33,14 @@ public class ItemView: UIView, ItemType { } } } + + public var isSecureText: Bool = false { + didSet { + if let text = text { + label.text = isSecureText ? "*" : String(text) + } + } + } public let label: UILabel = .init() public let cursor: UIView = .init() diff --git a/PinCodeInputView/PinCodeInputView.swift b/PinCodeInputView/PinCodeInputView.swift index 4f13cf3..2386dec 100644 --- a/PinCodeInputView/PinCodeInputView.swift +++ b/PinCodeInputView/PinCodeInputView.swift @@ -37,6 +37,12 @@ public class PinCodeInputView: UIControl, UITextInputTrait override public var intrinsicContentSize: CGSize { return stackView.bounds.size } + + public var isSecureText: Bool = false { + didSet { + self.items.forEach({$0.itemView.isSecureText = self.isSecureText}) + } + } private let digit: Int private let itemSpacing: CGFloat @@ -63,7 +69,8 @@ public class PinCodeInputView: UIControl, UITextInputTrait digit: Int, itemSpacing: CGFloat, itemFactory: @escaping (() -> T), - autoresizes: Bool = false) { + autoresizes: Bool = false, + isSecureText: Bool = false) { self.digit = digit self.itemSpacing = itemSpacing @@ -79,10 +86,12 @@ public class PinCodeInputView: UIControl, UITextInputTrait } return item } + self.isSecureText = isSecureText self.stackView.frame = self.bounds addSubview(stackView) items.forEach { stackView.addArrangedSubview($0) } + items.forEach({$0.itemView.isSecureText = self.isSecureText}) stackView.spacing = itemSpacing stackView.axis = .horizontal stackView.distribution = .fillEqually