uitextfield add image swift 5 code example

Example: uitextfield add image swift 5

Useing example:
 let textView = BaseTextField()
 textView.rightImage = "magnifyingglass"


// Add this to your project
//MARK: - CustomTextView leftImage, rightImage
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.applyImage(rightImage!, false)
                self.setHPad = { return UIEdgeInsets( top: 0, left: 8, bottom: 0, right: 30 ) }()
            }
        }
    }
    
    @IBInspectable open var leftImage:String? {
        didSet {
            if (leftImage != nil) {
                self.applyImage(leftImage!, true)
                self.setHPad = { return UIEdgeInsets( top: 0, left: 30, bottom: 0, right: 8 ) }()
            }
        }
    }

    fileprivate func applyImage(_ image: String, _ isLeftImage: Bool) {
        // 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
        let horizontalConstraint: String = isLeftImage ? "H:|-(none)-[imageHolder]-(>=default)-|" : "H:|-(>=default)-[imageHolder]-(none)-|"
        
        // set horizontal constraints
        self.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: horizontalConstraint,
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))
        // set vertical constraints
        self.addConstraints(
            NSLayoutConstraint.constraints(withVisualFormat: "V:|-(none)-[imageHolder]-(none)-|",
                                           options: [],
                                           metrics: metrics,
                                           views: viewsDictionary))
    }
    
}

Tags: