Commit 004e64c2 by Daniel Dahan Committed by GitHub

Merge pull request #1106 from OrkhanAlikhanov/clear-button

Added ability to show visibility and clear button at the same time
parents 8ac9ef6a 693ebed7
......@@ -302,6 +302,7 @@ open class TextField: UITextField {
set(value) {
guard value else {
clearIconButton?.removeTarget(self, action: #selector(handleClearIconButton), for: .touchUpInside)
removeFromRightView(view: clearIconButton)
clearIconButton = nil
return
}
......@@ -313,9 +314,8 @@ open class TextField: UITextField {
clearIconButton = IconButton(image: Icon.cm.clear, tintColor: placeholderNormalColor)
clearIconButton!.contentEdgeInsetsPreset = .none
clearIconButton!.pulseAnimation = .none
clearButtonMode = .never
rightViewMode = .whileEditing
rightView = clearIconButton
rightView?.grid.views.insert(clearIconButton!, at: 0)
isClearIconButtonAutoHandled = { isClearIconButtonAutoHandled }()
layoutSubviews()
......@@ -362,6 +362,7 @@ open class TextField: UITextField {
set(value) {
guard value else {
visibilityIconButton?.removeTarget(self, action: #selector(handleVisibilityIconButton), for: .touchUpInside)
removeFromRightView(view: visibilityIconButton)
visibilityIconButton = nil
return
}
......@@ -375,9 +376,8 @@ open class TextField: UITextField {
updateVisibilityIcon()
visibilityIconButton!.contentEdgeInsetsPreset = .none
visibilityIconButton!.pulseAnimation = .centerRadialBeyondBounds
clearButtonMode = .never
rightViewMode = .whileEditing
rightView = visibilityIconButton
rightView?.grid.views.append(visibilityIconButton!)
isVisibilityIconButtonAutoHandled = { isVisibilityIconButtonAutoHandled }()
layoutSubviews()
......@@ -429,10 +429,9 @@ open class TextField: UITextField {
layoutShape()
layoutPlaceholderLabel()
layoutBottomLabel(label: detailLabel, verticalOffset: detailVerticalOffset)
layoutButton(button: clearIconButton)
layoutButton(button: visibilityIconButton)
layoutDivider()
layoutLeftView()
layoutRightView()
}
open override func becomeFirstResponder() -> Bool {
......@@ -475,6 +474,7 @@ open class TextField: UITextField {
prepareDetailLabel()
prepareTargetHandlers()
prepareTextAlignment()
prepareRightView()
}
}
......@@ -517,6 +517,14 @@ fileprivate extension TextField {
func prepareTextAlignment() {
textAlignment = .rightToLeft == Application.userInterfaceLayoutDirection ? .right : .left
}
/// Prepares the rightView.
func prepareRightView() {
rightView = UIView()
rightView?.grid.columns = 2
rightViewMode = .whileEditing
clearButtonMode = .never
}
}
fileprivate extension TextField {
......@@ -589,11 +597,6 @@ fileprivate extension TextField {
placeholderLabel.frame.origin.y = -placeholderLabel.frame.height + placeholderVerticalOffset
}
/// Layout the a button.
func layoutButton(button: UIButton?) {
button?.frame = CGRect(x: bounds.width - bounds.height, y: 0, width: bounds.height, height: bounds.height)
}
/// Layout the leftView.
func layoutLeftView() {
......@@ -605,6 +608,16 @@ fileprivate extension TextField {
v.frame = CGRect(x: 0, y: 0, width: w, height: bounds.height)
dividerContentEdgeInsets.left = w
}
/// Layout the rightView.
func layoutRightView() {
guard let rightView = rightView else {
return
}
let w = CGFloat(rightView.grid.views.count) * bounds.height
rightView.frame = CGRect(x: bounds.width - w, y: 0, width: w, height: bounds.height)
rightView.grid.reload()
}
}
internal extension TextField {
......@@ -779,4 +792,13 @@ private extension TextField {
func updateVisibilityIcon() {
visibilityIconButton?.image = isSecureTextEntry ? visibilityIconOff : visibilityIconOn
}
/// Remove view from rightView.
func removeFromRightView(view: UIView?) {
guard let v = view, let i = rightView?.grid.views.index(of: v) else {
return
}
rightView?.grid.views.remove(at: i)
}
}
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