Szybko dodaj ikonę / obraz w UITextField

101

Chciałbym dodać ikonę / obraz w UITextField. Ikonę / obraz należy pozostawić jako symbol zastępczy.

wprowadź opis obrazu tutaj

Próbowałem tego:

var imageView = UIImageView();
var image = UIImage(named: "email.png");
imageView.image = image;
emailField.leftView = imageView;

Dzięki.

informatiker
źródło
74
Przypadkowo dodałeś średniki: D
Gerald
10
emailField.leftView = UIImageView(image: UIImage(named: "search")):)
tspentzas
Używając @IBDesignablemożemy to zrobić w elegancki sposób, jak w tym przykładzie: stackoverflow.com/a/51841433/8238512
Rizwan

Odpowiedzi:

121

Spróbuj dodać emailField.leftViewMode = UITextFieldViewMode.Always

(Domyślnie leftViewModejest Never)

Zaktualizowana odpowiedź dla Swift 4

emailField.leftViewMode = UITextFieldViewMode.always

emailField.leftViewMode = .always
Markus
źródło
Hmm, u mnie zadziałało, czy wypróbowałeś to ze zaktualizowaną wartością ( UITextFieldViewMode.Always)? Czy masz pojęcie, co to nie zadziałało? (na przykład czy to się skompilowało?)
Markus
To jest cały mój kod w sekcji „ViewWillAppear”: „var imageView = UIImageView (); var image = UIImage (o nazwie: "email.png"); imageView.image = obraz; emailTextField.leftView = imageView; emailTextField.leftViewMode = UITextFieldViewMode.Always
informatiker
@informatiker Ok, więc czy na pewno masz poprawne połączenia, jeśli na przykład ustawisz kolor tła to emailTextFieldczy to naprawdę się zmienia? Czy jesteś pewien, że obraz tam jest? Na przykład Utwórz inny UIImageView i załaduj imagew tym, aby sprawdzić, czy to działa.
Markus
4
Tak, dziękuję. Problem polegał na tym, że ikona była biała i nie była widoczna na białym tle.
informatiker
5
Kontynuowałem poszukiwania i w końcu udało mi się je uruchomić, przegapiłem ustawienie ramki dla widoku obrazu. Wygląda na to, że musimy ustawić ramkę na obrazie przed dodaniem go do uitextfield. Coś w tym styluimageView1.frame = CGRect(x: 5, y: 0, width: userName.frame.height, height: userName.frame.height) view.addSubview(imageView1)
Sashi
124

Sahil ma świetną odpowiedź i chciałem to wziąć i rozszerzyć do @IBDesignable, aby programiści mogli dodawać obrazy do swoich UITextField na Storyboard.

Swift 4.2

import UIKit

@IBDesignable
class DesignableUITextField: UITextField {
    
    // Provides left padding for images
    override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
        var textRect = super.leftViewRect(forBounds: bounds)
        textRect.origin.x += leftPadding
        return textRect
    }
    
    @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }
    
    @IBInspectable var leftPadding: CGFloat = 0
    
    @IBInspectable var color: UIColor = UIColor.lightGray {
        didSet {
            updateView()
        }
    }
    
    func updateView() {
        if let image = leftImage {
            leftViewMode = UITextField.ViewMode.always
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            // Note: In order for your image to use the tint color, you have to select the image in the Assets.xcassets and change the "Render As" property to "Template Image".
            imageView.tintColor = color
            leftView = imageView
        } else {
            leftViewMode = UITextField.ViewMode.never
            leftView = nil
        }
        
        // Placeholder text color
        attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: color])
    }
}

Co tu się dzieje?

Ten projekt umożliwia:

  • Ustaw obraz po lewej stronie
  • Dodaj dopełnienie między lewą krawędzią UITextField a obrazem
  • Ustaw kolor, aby dopasować obraz i tekst zastępczy

Uwagi

  • Aby zmienić kolor obrazu, należy postępować zgodnie z tą uwagą w komentarzu w kodzie
  • Kolor obrazu nie zmieni się w Storyboard. Musisz uruchomić projekt, aby zobaczyć kolor w symulatorze / urządzeniu.

Do zaprojektowania w Storyboard Storyboard

W czasie wykonywania Runtime

Mark Moeykens
źródło
5
Dodano w imageView.contentMode = .AspectFit, aby uniknąć zmiany rozmiaru obrazu.
Jerland2,
3
Wielkie dzięki za świetny post! Zmodyfikowałem go, aby mieć również opcję RTL. Kod dostępny tutaj: pastebin.com/7CCm6NEB
Ali Almohsen
Dobra robota! W końcu zrobiłem to samo później. Ha ha
Mark Moeykens
14
co z dopełnieniem między obrazem a tekstem?
Zaporozhchenko Oleksandr
1
świetna odpowiedź.
Ripa Saha
51

Chcę tylko dodać tutaj coś więcej:

Jeśli chcesz dodać obraz UITextFieldpo lewej stronie, użyj leftViewwłaściwościUITextField

UWAGA: Nie zapomnij ustawić leftViewModena, UITextFieldViewMode.Alwaysa prawo rightViewModedo UITextFieldViewMode.Always andwartości domyślnej toUITextFieldViewModeNever

np

Aby dodać obraz po lewej stronie

textField.leftViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.leftView = imageView

Aby dodać obraz po prawej stronie

textField.rightViewMode = UITextFieldViewMode.Always
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
let image = UIImage(named: imageName)
imageView.image = image
textField.rightView = imageView

UWAGA: na kilka rzeczy należy zwrócić uwagę podczas dodawania obrazu po UITextFieldlewej lub prawej stronie.

  • Nie zapomnij podać ramki, ImageViewktórą zamierzasz dodaćUITextField

    let imageView = UIImageView (ramka: CGRect (x: 0, y: 0, szerokość: 20, wysokość: 20))

  • jeśli tło twojego obrazu jest białe, obraz nie będzie widoczny UITextField

  • jeśli chcesz dodać obraz do określonej pozycji, musisz dodać go ImageViewjako podwidok UITextField.

Aktualizacja dla Swift 3.0

@Mark Moeykens Pięknie go rozbudował i uczynił z @IBDesignable .

Zmodyfikowałem i dodałem więcej funkcji (dodaj dolną linię i wypełnienie dla prawego obrazu) w tym.

UWAGA, jeśli chcesz dodać obraz po prawej stronie, możesz wybrać Force Right-to-Leftopcję w semantickonstruktorze interfejsu (ale dla prawego dopełnienia obrazu nie będzie działać, dopóki nie zastąpisz metody rightViewRect).

wprowadź opis obrazu tutaj

Zmodyfikowałem to i mogę pobrać źródło stąd ImageTextField

wprowadź opis obrazu tutaj

Sahil
źródło
jak mogę to dodać do rozszerzeń i wywołać w moim kontrolerze widoku? czy możesz mi zasugerować
narahari_arjun
Bardzo prosty! po prostu utwórz funkcję w rozszerzeniu UIViewController i przekaż nazwę obrazu i ref textfield podczas wywoływania tej funkcji.
Sahil
rozszerzenie UIViewController {func addLeftImage (imageName: String, textField: UITextField) {textField.leftViewMode = UITextFieldViewMode.Always let imageView = UIImageView (frame: CGRect (x: 0, y: 0, width: 20, height: 20)) let image = UIImage (o nazwie: imageName) imageView.image = image textField.leftView = imageView}} i nazwij to jak self.addLeftImage ("imganame", textField: yourtextfield)
Sahil
próbowałem zmienić pozycję ikony. ale nie zmieniony za pomocą tego kodu
Rahul Phate
22

UITextField z obrazem (lewy lub prawy)

Inny sposób, zainspirowany wcześniejszymi postami, aby zrobić rozszerzenie.

Obraz możemy umieścić po prawej lub po lewej stronie

extension UITextField {

enum Direction {
    case Left
    case Right
}

// add image to textfield
func withImage(direction: Direction, image: UIImage, colorSeparator: UIColor, colorBorder: UIColor){
    let mainView = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
    mainView.layer.cornerRadius = 5

    let view = UIView(frame: CGRect(x: 0, y: 0, width: 50, height: 45))
    view.backgroundColor = .white
    view.clipsToBounds = true
    view.layer.cornerRadius = 5
    view.layer.borderWidth = CGFloat(0.5)
    view.layer.borderColor = colorBorder.cgColor
    mainView.addSubview(view)

    let imageView = UIImageView(image: image)
    imageView.contentMode = .scaleAspectFit
    imageView.frame = CGRect(x: 12.0, y: 10.0, width: 24.0, height: 24.0)
    view.addSubview(imageView)

    let seperatorView = UIView()
    seperatorView.backgroundColor = colorSeparator
    mainView.addSubview(seperatorView)

    if(Direction.Left == direction){ // image left
        seperatorView.frame = CGRect(x: 45, y: 0, width: 5, height: 45)
        self.leftViewMode = .always
        self.leftView = mainView
    } else { // image right
        seperatorView.frame = CGRect(x: 0, y: 0, width: 5, height: 45)
        self.rightViewMode = .always
        self.rightView = mainView
    }

    self.layer.borderColor = colorBorder.cgColor
    self.layer.borderWidth = CGFloat(0.5)
    self.layer.cornerRadius = 5
}

}

Posługiwać się :

if let myImage = UIImage(named: "my_image"){
    textfield.withImage(direction: .Left, image: myImage, colorSeparator: UIColor.orange, colorBorder: UIColor.black)
}

Cieszyć się :)

Insou
źródło
1
Zrobiłeś mój dzień, dostosowałem „view.backgroundColor” i „imageView.tintColor”, aby można było go w pełni dostosować. Wielkie dzięki za odpowiedź xD
Andres Paladines
1
To jest niesamowite
Mohamed Haseel
1
To najlepsze i proste odpowiedzi
Gerardo Salazar Sánchez
14

Aby utworzyć dopełnienie, lubię umieścić obraz w widoku kontenera. Możesz usunąć kolor tła, gdy będziesz zadowolony z umieszczenia ikony.

wprowadź opis obrazu tutaj

let imageView = UIImageView(frame: CGRect(x: 8.0, y: 8.0, width: 24.0, height: 24.0))
let image = UIImage(named: "my_icon")
imageView.image = image
imageView.contentMode = .scaleAspectFit
imageView.backgroundColor = UIColor.red

let view = UIView(frame: CGRect(x: 0, y: 0, width: 32, height: 40))
view.addSubview(imageView)
view.backgroundColor = .green
textField.leftViewMode = UITextFieldViewMode.always
textField.leftView = view
S Yoshida
źródło
Dziękuję Ci. Dobre wyjaśnienie za pomocą kolorów.
Hamid Reza Ansari
13

dla Swift 3.0 dodaj obraz po lewej stronie textField

textField.leftView = UIImageView(image: "small-calendar")
textField.leftView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20)
textField.leftViewMode = .always
Maulik Patel
źródło
6

Szybki 5

@IBOutlet weak var paswd: UITextField! {
    didSet{
      paswd.setLeftView(image: UIImage.init(named: "password")!)
      paswd.tintColor = .darkGray
      paswd.isSecureTextEntry = true
    }   
 }

Stworzyłem rozszerzenie

extension UITextField {
  func setLeftView(image: UIImage) {
    let iconView = UIImageView(frame: CGRect(x: 10, y: 10, width: 25, height: 25)) // set your Own size
    iconView.image = image
    let iconContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 45))
    iconContainerView.addSubview(iconView)
    leftView = iconContainerView
    leftViewMode = .always
    self.tintColor = .lightGray
  }
}

Wynik

wprowadź opis obrazu tutaj

Gurjinder Singh
źródło
4

2020 - rozsądne rozwiązanie

Odnośnie tego szaleństwa Apple.

Oto prawdopodobnie „najbardziej przejrzysty” i najprostszy sposób na zrobienie tego:

wprowadź opis obrazu tutaj

Najpierw musisz poprawnie przenieść tekst.

Zwróć uwagę na tę krytyczną kontrolę jakości: https://stackoverflow.com/a/27066764/294884

class TidyTextField: UITextField {
    
    @IBInspectable var leftImage: UIImage? = nil
    @IBInspectable var leftPadding: CGFloat = 0
    @IBInspectable var gapPadding: CGFloat = 0
    
    private var textPadding: UIEdgeInsets {
        let p: CGFloat = leftPadding + gapPadding + (leftView?.frame.width ?? 0)
        return UIEdgeInsets(top: 0, left: p, bottom: 0, right: 5)
    }
    
    override open func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    
    override open func placeholderRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    
    override open func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.inset(by: textPadding)
    }
    

Kontynuując, musimy teraz zrobić i przesunąć lewy obraz:

    override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
        var r = super.leftViewRect(forBounds: bounds)
        r.origin.x += leftPadding
        return r
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }
    
    private func setup() {
        if let image = leftImage {
            if leftView != nil { return } // critical!
            
            let im = UIImageView()
            im.contentMode = .scaleAspectFit
            im.image = image
            
            leftViewMode = UITextField.ViewMode.always
            leftView = im
            
        } else {
            leftViewMode = UITextField.ViewMode.never
            leftView = nil
        }
    }
}

Wydaje się, że jest to najbardziej przejrzysty i niezawodny sposób, aby to zrobić.

Fattie
źródło
3

Stworzyłem prosty IBDesignable. Używaj go tak, jak lubisz. Po prostu upewnij się, że UITextField potwierdza tę klasę.

import UIKit

@IBDesignable
class RoundTextField : UITextField {
    @IBInspectable var cornerRadius : CGFloat = 0{
        didSet{
            layer.cornerRadius = cornerRadius
            layer.masksToBounds = cornerRadius > 0
        }
    }

    @IBInspectable var borderWidth : CGFloat = 0 {
        didSet{
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var borderColor : UIColor? {
        didSet {
            layer.borderColor = borderColor?.cgColor
        }
    }

    @IBInspectable var bgColor : UIColor? {
        didSet {
            backgroundColor = bgColor
        }
    }

    @IBInspectable var leftImage : UIImage? {
        didSet {
            if let image = leftImage{
                leftViewMode = .always
                let imageView = UIImageView(frame: CGRect(x: 20, y: 0, width: 20, height: 20))
                imageView.image = image
                imageView.tintColor = tintColor
                let view = UIView(frame : CGRect(x: 0, y: 0, width: 25, height: 20))
                view.addSubview(imageView)
                leftView = view
            }else {
                leftViewMode = .never
            }

        }
    }

    @IBInspectable var placeholderColor : UIColor? {
        didSet {
            let rawString = attributedPlaceholder?.string != nil ? attributedPlaceholder!.string : ""
            let str = NSAttributedString(string: rawString, attributes: [NSForegroundColorAttributeName : placeholderColor!])
            attributedPlaceholder = str
        }
    }

    override func textRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: 50, dy: 5)
    }

    override func editingRect(forBounds bounds: CGRect) -> CGRect {
        return bounds.insetBy(dx: 50, dy: 5)
    }

}
Abhishek Biswas
źródło
3

wprowadź opis obrazu tutaj
Inny sposób na ustawienie symbolu zastępczego i wypełnienie pola tekstowego.

let userIcon = UIImage(named: "ImageName") 
setPaddingWithImage(image: userIcon, textField: txtUsername)

func setPaddingWithImage(image: UIImage, textField: UITextField){
    let imageView = UIImageView(image: image)
    imageView.contentMode = .scaleAspectFit
    let view = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 50))
    imageView.frame = CGRect(x: 13.0, y: 13.0, width: 24.0, height: 24.0)
    //For Setting extra padding other than Icon.
    let seperatorView = UIView(frame: CGRect(x: 50, y: 0, width: 10, height: 50))
    seperatorview.backgroundColor = UIColor(red: 80/255, green: 89/255, blue: 94/255, alpha: 1)
    view.addSubview(seperatorView)
    textField.leftViewMode = .always
    view.addSubview(imageView)
    view.backgroundColor = .darkGray
    textField.leftViewMode = UITextFieldViewMode.always
    textField.leftView = view
}
Sudhi 9135
źródło
2

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.image = UIImage(named: imageName)

        View.addSubview(imageView)

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

}
jethava yogesh
źródło
proszę dodać użycie i czego potrzebuję, aby przekazać parametr ramki?
Surya Reddy
w tej funkcji Parametr „Ramka” Użyj dla widoku z lewej lub prawej strony
jethava yogesh
1

Możesz umieścić tę funkcję w pliku globalnym lub nad klasą, aby mieć do niej dostęp w całej aplikacji. Po tej procedurze możesz wywołać tę funkcję zgodnie z wymaganiami aplikacji.

        func SetLeftSIDEImage(TextField: UITextField, ImageName: String){

                let leftImageView = UIImageView()
                leftImageView.contentMode = .scaleAspectFit

                let leftView = UIView()

                leftView.frame = CGRect(x: 20, y: 0, width: 30, height: 20)
                leftImageView.frame = CGRect(x: 13, y: 0, width: 15, height: 20)
                TextField.leftViewMode = .always
                TextField.leftView = leftView

                let image = UIImage(named: ImageName)?.withRenderingMode(.alwaysTemplate)
                leftImageView.image = image
                leftImageView.tintColor = UIColor(red: 106/255, green: 79/255, blue: 131/255, alpha: 1.0)
                leftImageView.tintColorDidChange()

                leftView.addSubview(leftImageView)
            }

            SetLeftSIDEImage(TextField: Your_textField, ImageName:YourImageName) // call function
Dhaval Solanki
źródło
2
Witamy w StackOverflow, czy jest jakiś sposób, w jaki możesz podać wyjaśnienia wraz z tym kodem? Odpowiedzi zawierające tylko kod są zazwyczaj usuwane z powodu niskiej jakości. Zapoznaj się również z tym przewodnikiem w celu uzyskania odpowiedzi w sekcji pomocy: stackoverflow.com/help/how-to-answer
Graham
0

Dlaczego nie wybierzesz najłatwiejszego podejścia. W większości przypadków chcesz dodać ikony takie jak niesamowite czcionki ... Po prostu użyj niesamowitej biblioteki czcionek i byłoby tak łatwo dodać ikonę do pola tekstowego, jak to:

myTextField.setLeftViewFAIcon(icon: .FAPlus, leftViewMode: .always, textColor: .red, backgroundColor: .clear, size: nil)

Najpierw musisz zainstalować tę szybką bibliotekę: https://github.com/Vaberer/Font-Awesome-Swift

Alex Zanfir
źródło
5
Dlaczego należy dodawać całą bibliotekę tylko po to, aby uzyskać jeden glif?
0

To jest zmodyfikowana wersja odpowiedzi Marka Moeykensa z dodanym wypełnieniem między obrazem a tekstem oraz regulowanym rozmiarem obrazu na wypadek, gdyby ktoś tego potrzebował.

Szybki 4

    import UIKit

    @IBDesignable
    class TextFieldWithImage: UITextField {

        override func leftViewRect(forBounds bounds: CGRect) -> CGRect {
            return super.leftViewRect(forBounds: bounds)
        }

        @IBInspectable var leftImage: UIImage? {
            didSet {
                updateView()
            }
        }
        @IBInspectable var leftPadding: CGFloat = 0 {
            didSet {
                updateView()
            }
        }
        @IBInspectable var rightPadding: CGFloat = 0 {
            didSet {
                updateView()
            }
        }
        @IBInspectable var imageMaxHeight: CGFloat = 0 {
            didSet {
                updateView()
            }
        }

        @IBInspectable var color: UIColor = UIColor.lightGray {
            didSet {
                updateView()
            }
        }

        func updateView() {
            if let image = leftImage {
                leftViewMode = UITextField.ViewMode.always

                let containerSize = calculateContainerViewSize(for: image)
                let containerView = UIView(frame: CGRect(x: 0, y: 0, width: containerSize.width, height: containerSize.height))

                let imageView = UIImageView(frame: .zero)
                containerView.addSubview(imageView)
                setImageViewConstraints(imageView, in: containerView)

                setImageViewProperties(imageView, image: image)

                leftView = containerView
            } else {
                leftViewMode = UITextField.ViewMode.never
                leftView = nil
            }

            attributedPlaceholder = NSAttributedString(string: placeholder != nil ? placeholder! : "",
                    attributes: [NSAttributedString.Key.foregroundColor: color])
        }

        private func calculateContainerViewSize(for image: UIImage) -> CGSize {
            let imageRatio = image.size.height / image.size.width
            let adjustedImageMaxHeight = imageMaxHeight > self.frame.height ? self.frame.height : imageMaxHeight

            var imageSize = CGSize()
            if image.size.height > adjustedImageMaxHeight {
                imageSize.height = adjustedImageMaxHeight
                imageSize.width = imageSize.height / imageRatio
            }

            let paddingWidth = leftPadding + rightPadding

            let containerSize = CGSize(width: imageSize.width + paddingWidth, height: imageSize.height)
            return containerSize
        }

        private func setImageViewConstraints(_ imageView: UIImageView, in containerView: UIView) {
            imageView.translatesAutoresizingMaskIntoConstraints = false
            imageView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
            imageView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
            imageView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor, constant: -rightPadding).isActive = true
            imageView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor, constant: leftPadding).isActive = true
        }

        private func setImageViewProperties(_ imageView: UIImageView, image: UIImage) {
            imageView.contentMode = .scaleAspectFit
            imageView.image = image
            imageView.tintColor = color
        }
    }
l.sypniewski
źródło
0

Szybki 5

Podobny do @Markus, ale w Swift 5 :

emailTextField.leftViewMode = UITextField.ViewMode.always
emailTextField.leftViewMode = .always
Jerry Chong
źródło
0

SwiftUI

RoundedRectangle(cornerRadius: 50)
                .frame(height: 40)
                .colorInvert() // sets the background white
            .padding()
            .shadow(radius: 12) // adds shadow to the rectangle
                .overlay(
                    HStack(spacing: 20){

                        Image(systemName: "person")
                            .resizable()
                            .aspectRatio(contentMode: .fit)

                        TextField("Username ", text: $username)
                            .font(Font.custom("Arial", size: 25))


                            .font(.title)
                    }
                    .padding()
                    .padding()
                )

Wyniki

Roberto Font
źródło
0

Korzystając z rozszerzenia w Swift4, możemy łatwo umieścić obraz po prawej lub lewej stronie z dopełnieniem do TextField.

extension UITextField {

    //MARK:- Set Image on the right of text fields

  func setupRightImage(imageName:String){
    let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
    imageView.image = UIImage(named: imageName)
    let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
    imageContainerView.addSubview(imageView)
    rightView = imageContainerView
    rightViewMode = .always
    self.tintColor = .lightGray
}

 //MARK:- Set Image on left of text fields

    func setupLeftImage(imageName:String){
       let imageView = UIImageView(frame: CGRect(x: 10, y: 10, width: 20, height: 20))
       imageView.image = UIImage(named: imageName)
       let imageContainerView: UIView = UIView(frame: CGRect(x: 0, y: 0, width: 55, height: 40))
       imageContainerView.addSubview(imageView)
       leftView = imageContainerView
       leftViewMode = .always
       self.tintColor = .lightGray
     }

  }

Użyj kodu jak przy ustawieniach obrazu po lewej stronie: -

   self.password_text_field.setupLeftImage(imageName: "unlock")

Wynik :)

wprowadź opis obrazu tutaj

Ashutosh kumar Mishra
źródło