uitextfield add right image swift 5
Swift 5
// Example:
let textView = BaseTextField()
// set right image
textView.rightImage = "magnifyingglass"
//MARK: - CustomTextView
class BaseTextField: UITextField {
var setHPad: UIEdgeInsets = { return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8 ) }()
override open func textRect( forBounds bounds: CGRect ) -> CGRect {
return bounds.inset( by: self.setHPad )
}
override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: self.setHPad )
}
override open func editingRect(forBounds bounds: CGRect) -> CGRect {
return bounds.inset(by: self.setHPad )
}
@IBInspectable open var rightImage:String? {
didSet {
if (rightImage != nil) {
self.applyRightImage(rightImage!)
self.setHPad = { return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 30 ) }()
}
}
}
fileprivate func applyRightImage(_ image: String) {
// set image
let imageView = UIImageView()
imageView.image = UIImage( systemName: image )
imageView.tintColor = UIColor(named: K.EpColors.black)
imageView.clipsToBounds = true
// set holder
let viewHolder = UIView()
viewHolder.clipsToBounds = true
viewHolder.addSubview(imageView)
// prepare for constraints
imageView.translatesAutoresizingMaskIntoConstraints = false
viewHolder.translatesAutoresizingMaskIntoConstraints = false
// views param
let viewsDictionary = [
"imageHolder": viewHolder,
"image":imageView
]
let metrics = [
"default": 8,
"none": 0
]
// set horisontal constraints
viewHolder.addConstraints(
NSLayoutConstraint.constraints(withVisualFormat: "H:|-(default)-[image]-(default)-|",
options: [],
metrics: metrics,
views: viewsDictionary))
// set vertical constraints
viewHolder.addConstraints(
NSLayoutConstraint.constraints(withVisualFormat: "V:|-(default)-[image]-(default)-|",
options: [],
metrics: metrics,
views: viewsDictionary))
// add image to textfield
self.addSubview(viewHolder)
// keep childView from overflowing
self.clipsToBounds = true
// set horizontal constraints
self.addConstraints(
NSLayoutConstraint.constraints(withVisualFormat: "H:|-(>=default)-[imageHolder]-(none)-|",
options: [],
metrics: metrics,
views: viewsDictionary))
// set vertical constraints
self.addConstraints(
NSLayoutConstraint.constraints(withVisualFormat: "V:|-(none)-[imageHolder]-(none)-|",
options: [],
metrics: metrics,
views: viewsDictionary))
}
}