import UIKit enum ButtonType: Int { case leftView case rightView } typealias CompletionButtonPressed = (_ success: Bool, _ type: ButtonType) -> Void class CustomTextField: UITextField { var completion: CompletionButtonPressed? lazy var leftViewButton: UIButton = { let button = UIButton(type: .system) // button.setImage(, for: .normal) Use your image to assign in this line button.addTarget(self, action: #selector(handleLeftViewButton), for: .touchUpInside) button.frame = CGRect(x: 0, y: 0, width: 20, height: self.frame.size.height) // Use this attribute to give frame for left view // button.isUserInteractionEnabled = false Use this line for user interaction If you want, user interact with this button. // button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) Use Inset as per your requirement for image return button }() lazy var rightViewButton: UIButton = { let button = UIButton(type: .system) // button.setImage(, for: .normal) Use your image to assign in this line button.addTarget(self, action: #selector(handleRightViewButton), for: .touchUpInside) button.frame = CGRect(x: 0, y: 0, width: 20, height: self.frame.size.height) // Use this attribute to give frame for right view // button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) Use Inset as per your requirement for image // button.isUserInteractionEnabled = false Use this line for user interaction If you want, user interact with this button. return button }() // MARK: - Use when assign to storyboard - override func awakeFromNib() { super.awakeFromNib() setupInitializationProperties() } // MARK: - Use when programatically initialize - override init(frame: CGRect) { super.init(frame: frame) setupInitializationProperties() } required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } fileprivate func setupInitializationProperties() { leftView = leftViewButton rightView = rightViewButton rightViewMode = .always leftViewMode = .always } // MARK: - Left Button handler @objc fileprivate func handleLeftViewButton() { // if you want your custom logic, perform here before completion completion?(true, .leftView) } // MARK: - Right button handler @objc fileprivate func handleRightViewButton() { // if you want your custom logic, perform here before completion completion?(true, .rightView) } }