Thêm biểu tượng / hình ảnh nhanh chóng trong UITextField


101

Tôi muốn thêm biểu tượng / hình ảnh trong UITextField. Biểu tượng / hình ảnh nên được để cho trình giữ chỗ.

nhập mô tả hình ảnh ở đây

Tôi đã thử điều này:

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

Cảm ơn.


74
Bạn phẩy vô tình nói thêm: D
Gerald

10
emailField.leftView = UIImageView(image: UIImage(named: "search")):)
tspentzas

Sử dụng @IBDesignablechúng ta có thể thực hiện việc này một cách thanh lịch như trong ví dụ này: stackoverflow.com/a/51841433/8238512
Rizwan

Câu trả lời:


120

Thử thêm emailField.leftViewMode = UITextFieldViewMode.Always

(Mặc định leftViewModeNever)

Câu trả lời cập nhật cho Swift 4

emailField.leftViewMode = UITextFieldViewMode.always

emailField.leftViewMode = .always

Hmm nó hoạt động với tôi, bạn đã thử nó với giá trị được cập nhật ( UITextFieldViewMode.Always) chưa? Bạn có bất kỳ ý tưởng nào về những gì nó đã không hoạt động? (ví dụ: nó có biên dịch không?)
Markus

Đây là toàn bộ mã của tôi trong phần 'ViewWillAppear': 'var imageView = UIImageView (); var image = UIImage (tên: "email.png"); imageView.image = hình ảnh; emailTextField.leftView = imageView; emailTextField.leftViewMode = UITextFieldViewMode.Always
tin vào

@informatiker Ok, Vì vậy, bạn có chắc chắn rằng bạn có các kết nối chính xác, nếu bạn đặt ví dụ: màu nền của emailTextFieldnó thực sự thay đổi? Và bạn có chắc rằng hình ảnh đó có? Ví dụ: tạo một UIImageView khác và tải UIImageView imagevào đó để xác minh rằng nó hoạt động.
Markus

4
Vâng cảm ơn. Vấn đề là biểu tượng có màu trắng và không hiển thị trên nền trắng.
tin vào

5
Tôi tiếp tục tìm kiếm và cuối cùng nó đã hoạt động, tôi đã bỏ lỡ việc thiết lập khung cho chế độ xem hình ảnh. Có vẻ như chúng ta cần thiết lập khung trên hình ảnh trước khi thêm nó vào trường uitext. Một cái gì đó như thế nàyimageView1.frame = CGRect(x: 5, y: 0, width: userName.frame.height, height: userName.frame.height) view.addSubview(imageView1)
Sashi

123

Sahil có một câu trả lời tuyệt vời và tôi muốn lấy điều đó và mở rộng nó thành @IBDesignable để các nhà phát triển có thể thêm hình ảnh vào UITextFields của họ trên 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])
    }
}

Chuyện gì đang xảy ra ở đây?

Có thể chỉ định này cho phép bạn:

  • Đặt một hình ảnh ở bên trái
  • Thêm phần đệm giữa cạnh trái của UITextField và hình ảnh
  • Đặt màu để hình ảnh và văn bản Trình giữ chỗ khớp với nhau

Ghi chú

  • Để màu ảnh thay đổi, bạn phải làm theo ghi chú đó trong phần bình luận trong mã
  • Màu hình ảnh sẽ không thay đổi trong Bảng phân cảnh. Bạn phải chạy dự án để xem màu trong Trình mô phỏng / thiết bị.

Có thể thiết kế trong Bảng phân cảnh Bảng phân cảnh

Trong thời gian chạy Thời gian chạy


5
Đã thêm vào imageView.contentMode = .AspectFit, để tránh thay đổi kích thước hình ảnh.
Jerland2

3
Cảm ơn rất nhiều cho bài viết tuyệt vời! Tôi đã sửa đổi nó để cũng có tùy chọn RTL. Mã có sẵn tại đây: pastebin.com/7CCm6NEB
Ali Almohsen 21/02/17

Làm tốt lắm, các bạn! Tôi cũng đã làm điều tương tự sau đó. Ha ha
Mark Moeykens 22/02/17

14
những gì về đệm giữa hình ảnh và văn bản?
Zaporozhchenko Oleksandr

1
câu trả lời tuyệt vời.
Ripa Saha

51

Tôi chỉ muốn thêm một số điều nữa ở đây:

Nếu bạn muốn thêm hình ảnh UITextFieldở bên trái, hãy sử dụng leftViewthuộc tính củaUITextField

Chú ý: Đừng quên đặt leftViewModeđể UITextFieldViewMode.Alwaysvà cho lẽ phải rightViewModeđể UITextFieldViewMode.Always andmặc định làUITextFieldViewModeNever

ví dụ

Để thêm hình ảnh ở phía bên trái

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

Để thêm một hình ảnh ở phía bên phải

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

LƯU Ý: một số điều bạn cần chú ý khi thêm hình ảnh ở UITextFieldbên trái hoặc bên phải.

  • Đừng quên cung cấp một khung ImageViewmà bạn sẽ thêm vàoUITextField

    let imageView = UIImageView (frame: CGRect (x: 0, y: 0, width: 20, height: 20))

  • nếu nền hình ảnh của bạn là màu trắng thì hình ảnh sẽ không hiển thị trên UITextField

  • nếu bạn muốn thêm hình ảnh vào vị trí cụ thể mà bạn cần thêm ImageViewlàm chế độ xem phụ của UITextField.

Cập nhật cho Swift 3.0

@Mark Moeykens đã sử dụng nó một cách tuyệt vời và biến nó thành @IBDesignable .

Tôi đã sửa đổi và thêm một số tính năng khác (thêm Dòng dưới cùng và phần đệm cho hình ảnh bên phải) trong này.

LƯU Ý nếu bạn muốn thêm hình ảnh ở phía bên phải, bạn có thể chọn Force Right-to-Lefttùy chọn semantictrong trình tạo giao diện (Nhưng đối với phần đệm hình ảnh bên phải sẽ không hoạt động cho đến khi bạn ghi đè phương thức rightViewRect).

nhập mô tả hình ảnh ở đây

Tôi đã sửa đổi điều này và có thể tải xuống nguồn từ đây ImageTextField

nhập mô tả hình ảnh ở đây


làm cách nào để thêm cái này vào tiện ích mở rộng và gọi trong bộ điều khiển chế độ xem của tôi? bạn có thể gợi ý cho tôi không
narahari_arjun

Rất đơn giản! chỉ cần tạo hàm trong tiện ích mở rộng UIViewController và chuyển imagename và textfield ref khi gọi hàm đó.
Sahil

extension UIViewController {func addLeftImage (imageName: String, textField: UITextField) {textField.leftViewMode = UITextFieldViewMode Luôn để imageView = UIImageView (frame: CGRect (x: 0, y: 0, width: 20, height: 20)) let image = UIImage (tên: imageName) imageView.image = hình ảnh textField.leftView = IMAGExem}} và gọi nó là như self.addLeftImage ( "imganame", TextField: yourtextfield)
Sahil

tôi đã cố gắng thay đổi vị trí biểu tượng. nhưng không thay đổi sử dụng mã này
Rahul Phate

22

UITextField với hình ảnh (trái hoặc phải)

Một cách khác, lấy cảm hứng từ các bài viết trước để tạo tiện ích mở rộng.

Chúng ta có thể đặt hình ảnh ở bên phải hoặc bên trái

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
}

}

Sử dụng :

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

Thưởng thức :)


1
Bạn đã tạo nên ngày của tôi, tôi đã tùy chỉnh "view.backgroundColor" và "imageView.tintColor" để làm cho nó có thể tùy chỉnh hoàn toàn. Cảm ơn rất nhiều cho câu trả lời của bạn xD
Andres Paladines

1
Đây là tuyệt vời
Mohamed Haseel

1
Đây là câu trả lời tốt nhất và đơn giản
Gerardo Salazar Sánchez

14

Để tạo vùng đệm, tôi muốn đặt hình ảnh bên trong chế độ xem vùng chứa. Bạn có thể xóa màu nền sau khi hài lòng với vị trí biểu tượng.

nhập mô tả hình ảnh ở đây

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

Cảm ơn bạn. Giải thích tốt với màu sắc.
Hamid Reza Ansari

13

cho Swift 3.0 thêm hình ảnh ở bên trái của textField

textField.leftView = UIImageView(image: "small-calendar")
textField.leftView?.frame = CGRect(x: 0, y: 5, width: 20 , height:20)
textField.leftViewMode = .always

6

Swift 5

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

Tôi đã tạo tiện ích mở rộng

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
  }
}

Kết quả

nhập mô tả hình ảnh ở đây


3

Tôi đã tạo một IBDesignable đơn giản. Sử dụng nó theo cách bạn thích. Chỉ cần xác nhận UITextField của bạn với lớp này.

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)
    }

}

3

nhập mô tả hình ảnh ở đây
Một cách khác để đặt biểu tượng chỗ dành sẵn và đặt phần đệm thành TextField.

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
}

3

2020 - giải pháp hợp lý

Về sự điên rồ này từ Apple.

Đây có lẽ là cách "rõ ràng" nhất, đơn giản nhất để làm điều đó:

nhập mô tả hình ảnh ở đây

Đầu tiên, bạn phải di chuyển chính xác văn bản.

Lưu ý QA quan trọng này: 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)
    }
    

tiếp tục, bây giờ chúng ta phải tạo và di chuyển hình ảnh bên trái:

    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
        }
    }
}

Đây dường như là về cách rõ ràng, đáng tin cậy nhất để làm điều đó.


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
        }
    }

}

vui lòng thêm công dụng và những gì tôi cần để vượt qua thông số khung?
Surya Reddy

trong chức năng "Frame" này Parameter Mục đích SD sang trái hoặc phải Xem
jethava Yogesh

1

Bạn có thể đặt chức năng này tệp chung của bạn hoặc bên trên lớp của bạn để bạn có thể truy cập nó trong toàn bộ ứng dụng. Sau quy trình này, bạn có thể gọi hàm này theo yêu cầu của bạn trong ứng dụng.

        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

2
Chào mừng bạn đến với StackOverflow, có cách nào bạn có thể xem xét một số lời giải thích cùng với mã này không? Các câu trả lời chỉ có mã trong đó có xu hướng bị xóa vì chất lượng thấp. Xin hãy xem hướng dẫn này để trả lời các câu trong phần giúp đỡ: stackoverflow.com/help/how-to-answer
Graham

0

Tại sao bạn không tìm cách tiếp cận dễ dàng nhất. Đối với hầu hết các trường hợp, bạn muốn thêm các biểu tượng như phông chữ tuyệt vời ... Chỉ cần sử dụng thư viện phông chữ tuyệt vời và bạn sẽ dễ dàng thêm một biểu tượng vào trường văn bản như sau:

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

Trước tiên, bạn cần cài đặt thư viện nhanh này: https://github.com/Vaberer/Font-Awesome-Swift


5
Tại sao người ta nên thêm toàn bộ thư viện chỉ để lấy một glyph?

0

Đây là phiên bản sửa đổi của câu trả lời của Mark Moeykens với thêm phần đệm giữa hình ảnh và văn bản và kích thước hình ảnh có thể điều chỉnh trong trường hợp ai đó cần.

Swift 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
        }
    }

0

Swift 5

Tương tự như @Markus, nhưng trong Swift 5 :

emailTextField.leftViewMode = UITextField.ViewMode.always
emailTextField.leftViewMode = .always

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()
                )

Các kết quả


0

Sử dụng tiện ích mở rộng trong Swift4, Chúng ta có thể dễ dàng đặt hình ảnh ở bên phải hoặc bên trái với đệm vào 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
     }

  }

Sử dụng mã như cho thiết lập hình ảnh bên trái: -

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

Đầu ra :)

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.