2015-09-12 34 views
6

Aggiungi icona in UITextField utilizzandoSwift UITextField posizione icon set

var leftImageView = UIImageView() 
leftImageView.image = leftImage 
textField.leftView = leftImageView 
textField.leftViewMode = UITextFieldViewMode.Always 
leftImageView.frame = CGRectMake(15, 10, 15, 20) 
textField.addSubview(leftImageView) 

O/P per questo Image is close to textfield border

ho trovato soluzione come rimuovere questo codice dall'alto codice

textField.leftView = leftImageView 

E dare icona allineamento corretto ma ogni volta iniziare a modificare il testo del campo di testo su un'icona come questa enter image description here

Voglio o/p come questo

enter image description here

+0

prova questa fantastica libreria in swift 3.0 https://github.com/Sahilberi/ImageTextField – Sahil

risposta

12

Prima di tutto, si dovrebbe sicuramente non aggiungere l'immagine come una visualizzazione secondaria per l'etichetta. È sufficiente impostare la proprietà leftView.

textField.addSubview(leftImageView) // Delete this line 

In secondo luogo, qualsiasi x o y offset applicato al riquadro della vista sinistra viene ignorato. Il campo di testo si preoccuperà solo delle dimensioni della vista. Se si desidera aggiungere padding attorno all'immagine, un'opzione è usare una vista contenitore e posizionare la vista dell'immagine al suo interno.

let leftImageView = UIImageView() 
leftImageView.image = leftImage 

let leftView = UIView() 
leftView.addSubview(leftImageView) 

leftView.frame = CGRectMake(0, 0, 30, 20) 
leftImageView.frame = CGRectMake(0, 0, 15, 20) 

textField.leftView = leftView 

Un'altra opzione sarebbe quella di sottoclasse UITextField e sovrascrivere leftViewRectForBounds.

2

Prova questo. Potrebbe essere di aiuto.

var padding: Float = 20 

var envelopeView: UIImageView = UIImageView(frame: CGRectMake(padding, 0, 30, 30)) 
envelopeView.image = UIImage.imageNamed("comment-128.png") 
envelopeView.contentMode = UIViewContentModeScaleAspectFit 

var viewLeft: UIView = UIView(frame: CGRectMake(padding, 0, 30, 30)) 
viewLeft.addSubview(envelopeView) 
textField.leftView.setFrame(envelopeView.frame) 
textField.leftView = viewLeft 
textField.leftViewMode = UITextFieldViewModeAlways 

var viewRight: UIView = UIView(frame: CGRectMake(textField.frame.size.width - (textField.frame.size.width + 30 + padding), 0, 30, 30)) 
viewRight.addSubview(envelopeView) 
textField.rightView.setFrame(envelopeView.frame) 
textField.rightView = viewRight 
textField.rightViewMode = UITextFieldViewModeAlways 
4

Riferendosi sintassi @hennes, ci sono alcune sintassi manca in rapida come sintassi CGRect è cambiato e userNameTextField.leftViewMode = .always manca

Con sintassi Swift Questo ha funzionato per me:

let leftImageView = UIImageView() 
    leftImageView.image = UIImage(named: "email") 

    let leftView = UIView() 
    leftView.addSubview(leftImageView) 

    leftView.frame = CGRect(x: 0, y: 0, width: 40, height: 40) 
    leftImageView.frame = CGRect(x: 10, y: 10, width: 20, height: 20) 
    userNameTextField.leftViewMode = .always 
    userNameTextField.leftView = leftView 
1

Swift 3.1

extension UITextField 
{ 
    enum Direction 
    { 
     case Left 
     case Right 
    } 

    func AddImage(direction:Direction,imageName:String,Frame:CGRect,backgroundColor:UIColor) 
    { 
     let View = UIView(frame: Frame) 
     View.backgroundColor = backgroundColor 

     let imageView = UIImageView(frame: Frame) 
     imageView.contentMode = .center 
     imageView.image = UIImage(named: imageName) 

     View.addSubview(imageView) 

     if Direction.Left == direction 
     { 
      self.leftViewMode = .always 
      self.leftView = View 
     } 
     else 
     { 
      self.rightViewMode = .always 
      self.rightView = View 
     } 
    } 
} 
+1

come usare questo @jethava yogesh –

+0

yourtextbox.AddImage (direction: .Left, imageName: "imageName", Frame: CGRect (x: 0, y: 0, larghezza: 100, altezza: 40), backgroundColor: UIColor.red) –