Commit 5a4985e1 by Daniel Dahan

Merge branch 'development' of github.com:CosmicMind/Material into development

parents a741f921 7611c750
...@@ -204,6 +204,12 @@ open class TextField: UITextField { ...@@ -204,6 +204,12 @@ open class TextField: UITextField {
} }
} }
open override var isSecureTextEntry: Bool {
didSet {
updateVisibilityIcon()
}
}
/// The placeholder UILabel. /// The placeholder UILabel.
@IBInspectable @IBInspectable
open let placeholderLabel = UILabel() open let placeholderLabel = UILabel()
...@@ -333,6 +339,20 @@ open class TextField: UITextField { ...@@ -333,6 +339,20 @@ open class TextField: UITextField {
/// A reference to the visibilityIconButton. /// A reference to the visibilityIconButton.
open fileprivate(set) var visibilityIconButton: IconButton? open fileprivate(set) var visibilityIconButton: IconButton?
/// Icon for visibilityIconButton when in the on state.
open var visibilityIconOn = Icon.visibility {
didSet {
updateVisibilityIcon()
}
}
/// Icon for visibilityIconButton when in the off state.
open var visibilityIconOff = Icon.visibilityOff {
didSet {
updateVisibilityIcon()
}
}
/// Enables the visibilityIconButton. /// Enables the visibilityIconButton.
@IBInspectable @IBInspectable
open var isVisibilityIconButtonEnabled: Bool { open var isVisibilityIconButtonEnabled: Bool {
...@@ -350,10 +370,11 @@ open class TextField: UITextField { ...@@ -350,10 +370,11 @@ open class TextField: UITextField {
return return
} }
visibilityIconButton = IconButton(image: isSecureTextEntry ? Icon.visibility : Icon.visibilityOff, tintColor: placeholderNormalColor.withAlphaComponent(0.54)) isSecureTextEntry = true
visibilityIconButton = IconButton(image: nil, tintColor: placeholderNormalColor.withAlphaComponent(0.54))
updateVisibilityIcon()
visibilityIconButton!.contentEdgeInsetsPreset = .none visibilityIconButton!.contentEdgeInsetsPreset = .none
visibilityIconButton!.pulseAnimation = .centerRadialBeyondBounds visibilityIconButton!.pulseAnimation = .centerRadialBeyondBounds
isSecureTextEntry = true
clearButtonMode = .never clearButtonMode = .never
rightViewMode = .whileEditing rightViewMode = .whileEditing
rightView = visibilityIconButton rightView = visibilityIconButton
...@@ -639,8 +660,6 @@ fileprivate extension TextField { ...@@ -639,8 +660,6 @@ fileprivate extension TextField {
/// Handles the visibilityIconButton TouchUpInside event. /// Handles the visibilityIconButton TouchUpInside event.
@objc @objc
func handleVisibilityIconButton() { func handleVisibilityIconButton() {
isSecureTextEntry = !isSecureTextEntry
/// Workaround: Reassign text to reset cursor /// Workaround: Reassign text to reset cursor
/// This is a known issue with UITextField /// This is a known issue with UITextField
/// Source: https://stackoverflow.com/questions/14220187/uitextfield-has-trailing-whitespace-after-securetextentry-toggle /// Source: https://stackoverflow.com/questions/14220187/uitextfield-has-trailing-whitespace-after-securetextentry-toggle
...@@ -657,11 +676,7 @@ fileprivate extension TextField { ...@@ -657,11 +676,7 @@ fileprivate extension TextField {
return return
} }
guard let v = self.visibilityIconButton else { self.isSecureTextEntry = !self.isSecureTextEntry
return
}
v.image = self.isSecureTextEntry ? Icon.visibilityOff?.tint(with: v.tintColor.withAlphaComponent(0.54)) : Icon.visibility?.tint(with: v.tintColor.withAlphaComponent(0.54))
}) })
} }
} }
...@@ -758,3 +773,10 @@ extension TextField { ...@@ -758,3 +773,10 @@ extension TextField {
}) })
} }
} }
private extension TextField {
/// Updates visibilityIconButton image based on isSecureTextEntry value.
func updateVisibilityIcon() {
visibilityIconButton?.image = isSecureTextEntry ? visibilityIconOff : visibilityIconOn
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment