Agregue un button en la vista derecha de UItextfield de tal manera que el text no se superponga al button

Puedo agregar un button a un campo de text en el lado derecho del UITextField usando la vista correcta; sin embargo, el text se solapa con el button. A continuación se muestra el código del button de vista derecha

UIView.commitAnimations() var btnColor = UIButton(type: .Custom) btnColor.addTarget(self, action: #selector(self.openEmoji), forControlEvents: .TouchUpInside) btnColor.frame = CGRect(x: CGFloat(textField.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25)) btnColor.setBackgroundImage(UIImage(named: "send.png"), forState: .Normal) textField.addSubview(btnColor) 

Por favor, hágamelo saber cómo otorgar relleno desde la vista correcta para el text.

use la propiedad rightView del UITextField. Básicamente, hay dos properties (esta y leftView en consecuencia) que le permiten colocar vistas / controles personalizados dentro del UITextField. Puede controlar si esas vistas se muestran o no con las properties rightViewMode / leftViewMode :

 textField.rightView = btnColor textField.rightViewMode = .unlessEditing 

por ejemplo,

 let button = UIButton(type: .custom) button.setImage(UIImage(named: "send.png"), for: .normal) button.imageEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0) button.frame = CGRect(x: CGFloat(txt.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25)) button.addTarget(self, action: #selector(self.refresh), for: .touchUpInside) textField.rightView = button textField.rightViewMode = .always 

y llame a la acción como

 @IBAction func refresh(_ sender: Any) { } 

Cree la extensión UITextField y agregue el método a continuación en él y puede cambiar el código de UIButton según su requerimiento.

 func setRightViewIcon(icon: UIImage) { let btnView = UIButton(frame: CGRect(x: 0, y: 0, width: ((self.frame.height) * 0.70), height: ((self.frame.height) * 0.70))) btnView.setImage(icon, for: .normal) btnView.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 3) self.rightViewMode = .always self.rightView = btnView } 

Puede asignar el button a la vista derecha del campo de text.

 var btnColor = UIButton(type: .Custom) btnColor.addTarget(self, action: #selector(self.openEmoji), forControlEvents: .TouchUpInside) btnColor.frame = CGRect(x: CGFloat(textField.frame.size.width - 25), y: CGFloat(5), width: CGFloat(25), height: CGFloat(25)) btnColor.setBackgroundImage(UIImage(named: "send.png"), forState: .Normal) textField.rightView = btnColor 
 internal var btnDropDown: UIButton { let size: CGFloat = 25.0 let button = UIButton(type: .custom) button.setImage(#imageLiteral(resourceName: "DropDownImage"), for: .normal) button.imageEdgeInsets = UIEdgeInsetsMake(0, -16, 0, 0) button.frame = CGRect(x: self.frame.size.width - size, y: 5.0, width: size, height: size) return button } 

Y lo usé así :

 override func awakeFromNib() { super.awakeFromNib() textField.rightView = self.btnDropDown textField.rightViewMode = .always }