Change of UITextField placeholder color

后端 未结 13 1519
别跟我提以往
别跟我提以往 2021-01-30 06:09

How to dynamically change placeholder color of the UITextField? This is always the same system color.

No option in xib editor.

相关标签:
13条回答
  • 2021-01-30 06:42

    First add this extension

    extension UITextField{
        @IBInspectable var placeHolderTextColor: UIColor? {
            set {
                let placeholderText = self.placeholder != nil ? self.placeholder! : ""
                attributedPlaceholder = NSAttributedString(string:placeholderText, attributes:[NSForegroundColorAttributeName: newValue!])
            }
            get{
                return self.placeHolderTextColor
            }
        }
    }
    

    Then you can change placeholder text color via storyboard or by just setting it like this :

    textfield.placeHolderTextColor = UIColor.red
    
    0 讨论(0)
  • 2021-01-30 06:44

    Use below code

    [YourtextField setValue:[UIColor colorWithRed:97.0/255.0 green:1.0/255.0 blue:17.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];
    
    0 讨论(0)
  • 2021-01-30 06:46

    @DogCoffee's answer in Swift would be

    let placeholderAttrs = [ NSForegroundColorAttributeName : UIColor.redColor()]
    let placeholder = NSAttributedString(string: "Some text", attributes: placeholderAttrs)
    
    textField.attributedPlaceholder = placeholder
    
    0 讨论(0)
  • 2021-01-30 06:46

    This is an improved version of the extension provided by @Medin Piranej above (good idea by the way!). This version avoids an endless cycle if you try to get the placeHolderTextColor and prevents crashes if the color set is nil.

    public extension UITextField {
    
    @IBInspectable public var placeholderColor: UIColor? {
        get {
            if let attributedPlaceholder = attributedPlaceholder, attributedPlaceholder.length > 0 {
                var attributes = attributedPlaceholder.attributes(at: 0,
                                                                  longestEffectiveRange: nil,
                                                                  in: NSRange(location: 0, length: attributedPlaceholder.length))
                return attributes[NSForegroundColorAttributeName] as? UIColor
            }
            return nil
        }
        set {
            if let placeholderColor = newValue {
                attributedPlaceholder = NSAttributedString(string: placeholder ?? "",
                                                           attributes:[NSForegroundColorAttributeName: placeholderColor])
            } else {
                // The placeholder string is drawn using a system-defined color.
                attributedPlaceholder = NSAttributedString(string: placeholder ?? "")
            }
        }
    }
    

    }

    0 讨论(0)
  • 2021-01-30 06:51

    I use this in SWIFT:

    myTextField.attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

    It seems that this works for others... I have no idea why it haven't worked for me before... maybe some project settings. Thanks for the comments. Currently I have no way how to test it again.

    Obsolete: But I don't know why, text is applied correctly, but placeholder color remains same (black/gray).

    --iOS8

    0 讨论(0)
  • 2021-01-30 06:51

    Try this:

    NSAttributedString *strUser = [[NSAttributedString alloc] initWithString:@"Username" attributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }];
    NSAttributedString *strPassword = [[NSAttributedString alloc] initWithString:@"Password" attributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }];
    
    self.username.attributedPlaceholder = strUser;
    self.password.attributedPlaceholder = strPassword;
    
    0 讨论(0)
提交回复
热议问题