Changing Placeholder Text Color with Swift

前端 未结 30 2352
独厮守ぢ
独厮守ぢ 2020-11-29 15:57

I have a design that implements a dark blue UITextField, as the placeholder text is by default a dark grey colour I can barely make out what the place holder te

相关标签:
30条回答
  • 2020-11-29 16:00

    You can set the placeholder text using an attributed string. Pass the color you want with the attributes:

    var myTextField = UITextField(frame: CGRect(x: 0, y: 0, width: 200, height: 30))
    myTextField.backgroundColor = .blue
    myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text",
                                 attributes: [NSForegroundColorAttributeName: UIColor.yellow])
    

    For Swift 3+ use following:

    myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text",
                                 attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])
    

    For Swift 4.2 use following:

    myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder text",
                                 attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])
    
    0 讨论(0)
  • 2020-11-29 16:01

    Xcode 9.2 Swift 4

    extension UITextField{
        @IBInspectable var placeHolderColor: UIColor? {
            get {
                return self.placeHolderColor
            }
            set {
                self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSAttributedStringKey.foregroundColor: newValue!])
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-29 16:03

    For swift 4.2 and above you can do it as below:

    textField.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.white])
    
    0 讨论(0)
  • 2020-11-29 16:03
        extension UITextField{
                @IBInspectable var placeHolderColor: UIColor? {
                    get {
                        return self.placeHolderColor
                    }
                    set {
                        self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ?
            self.placeholder! : "",
            attributes:[NSAttributedString.Key.foregroundColor : newValue!])
                    }
                } 
    }
    
    0 讨论(0)
  • 2020-11-29 16:04

    Objective C code for changing placeholder text color.

    First import this objc/runtime class -

    #import <objc/runtime.h>

    then replace your textfield name -

    Ivar ivar =  class_getInstanceVariable([UITextField class], "_placeholderLabel");
    UILabel *placeholderLabel = object_getIvar(YourTxtField, ivar);
    placeholderLabel.textColor = [UIColor whiteColor];

    0 讨论(0)
  • 2020-11-29 16:05

    Here am i writing all UIDesignable of UITextField. With the help of this code you can directly access it from UI file Inspector in storyboard

    @IBDesignable
    class CustomTextField: UITextField {
    
    @IBInspectable var leftImage: UIImage? {
        didSet {
            updateView()
        }
    }
    
    @IBInspectable var leftPadding: CGFloat = 0 {
        didSet {
            updateView()
        }
    }
    
    @IBInspectable var rightImage: UIImage? {
        didSet {
            updateView()
        }
    }
    
    @IBInspectable var rightPadding: CGFloat = 0 {
        didSet {
            updateView()
        }
    }
    
    private var _isRightViewVisible: Bool = true
    var isRightViewVisible: Bool {
        get {
            return _isRightViewVisible
        }
        set {
            _isRightViewVisible = newValue
            updateView()
        }
    }
    
    func updateView() {
        setLeftImage()
        setRightImage()
    
        // Placeholder text color
        attributedPlaceholder = NSAttributedString(string: placeholder != nil ?  placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: tintColor])
    }
    
    func setLeftImage() {
        leftViewMode = UITextField.ViewMode.always
        var view: UIView
    
        if let image = leftImage {
            let imageView = UIImageView(frame: CGRect(x: leftPadding, y: 0, width: 20, height: 20))
            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 = tintColor
    
            var width = imageView.frame.width + leftPadding
    
            if borderStyle == UITextField.BorderStyle.none || borderStyle == UITextField.BorderStyle.line {
                width += 5
            }
    
            view = UIView(frame: CGRect(x: 0, y: 0, width: width, height: 20))
            view.addSubview(imageView)
        } else {
            view = UIView(frame: CGRect(x: 0, y: 0, width: leftPadding, height: 20))
        }
    
        leftView = view
    }
    
    func setRightImage() {
        rightViewMode = UITextField.ViewMode.always
    
        var view: UIView
    
        if let image = rightImage, isRightViewVisible {
            let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
            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 = tintColor
    
            var width = imageView.frame.width + rightPadding
    
            if borderStyle == UITextField.BorderStyle.none || borderStyle == UITextField.BorderStyle.line {
                width += 5
            }
    
            view = UIView(frame: CGRect(x: 0, y: 0, width: width, height: 20))
            view.addSubview(imageView)
    
        } else {
            view = UIView(frame: CGRect(x: 0, y: 0, width: rightPadding, height: 20))
        }
    
        rightView = view
    }
    
    
    @IBInspectable public var borderColor: UIColor = UIColor.clear {
        didSet {
            layer.borderColor = borderColor.cgColor
        }
    }
    
    @IBInspectable public var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }
    
    @IBInspectable public var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }
    @IBInspectable public var bottomBorder: CGFloat = 0 {
        didSet {
           borderStyle = .none
            layer.backgroundColor = UIColor.white.cgColor
    
            layer.masksToBounds = false
         //   layer.shadowColor = UIColor.gray.cgColor
            layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
            layer.shadowOpacity = 1.0
            layer.shadowRadius = 0.0
        }
    }
    @IBInspectable public var bottomBorderColor : UIColor = UIColor.clear {
        didSet {
    
            layer.shadowColor = bottomBorderColor.cgColor
            layer.shadowOffset = CGSize(width: 0.0, height: 1.0)
            layer.shadowOpacity = 1.0
            layer.shadowRadius = 0.0
        }
    }
    /// Sets the placeholder color
    @IBInspectable var placeHolderColor: UIColor? {
        get {
            return self.placeHolderColor
        }
        set {
            self.attributedPlaceholder = NSAttributedString(string:self.placeholder != nil ? self.placeholder! : "", attributes:[NSAttributedString.Key.foregroundColor: newValue!])
        }
    }
    
    }
    
    0 讨论(0)
提交回复
热议问题