Як динамічно змінювати колір заповнювача UITextField
? Це завжди однаковий системний колір.
Немає можливості в редакторі xib.
Як динамічно змінювати колір заповнювача UITextField
? Це завжди однаковий системний колір.
Немає можливості в редакторі xib.
Відповіді:
З Документів
@property (неатомна, копія) NSAttributedString * attributedPlaceholder
За замовчуванням ця властивість рівна нулю. Якщо встановлено, рядок заповнювача малюється із використанням 70% сірого кольору та рештою інформації про стиль (крім кольору тексту) віднесеного рядка. Присвоєння нового значення цій властивості також замінює значення властивості заповнювача тими самими рядковими даними, хоча і без інформації про форматування. Призначення нового значення цій властивості не впливає на будь-які інші властивості текстового поля, пов’язані зі стилем.
Завдання-C
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ NSForegroundColorAttributeName : [UIColor redColor] }];
self.myTextField.attributedPlaceholder = str;
Стрімкий
let str = NSAttributedString(string: "Text", attributes: [NSForegroundColorAttributeName:UIColor.redColor()])
myTextField.attributedPlaceholder = str
Стрімкий 4
let str = NSAttributedString(string: "Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])
myTextField.attributedPlaceholder = str
NSAttributedString *str = [[NSAttributedString alloc] initWithString:@"Some Text" attributes:@{ UITextAttributeTextColor : [UIColor redColor] }];
_placeholderLabel.textColor
Швидко
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder", attributes:[NSForegroundColorAttributeName : UIColor.redColor()])
Завдання-C
UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
[[NSAttributedString alloc]
initWithString:@"Full Name"
attributes:@{NSForegroundColorAttributeName:color}];
PS скопіював 3 різні відповіді зі Stackoverflow.
_placeholderLabel
: деякі користувачі повідомляють про неприйняття App Store: stackoverflow.com/questions/1340224 / ...
Використовуйте код нижче
[YourtextField setValue:[UIColor colorWithRed:97.0/255.0 green:1.0/255.0 blue:17.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];
Спочатку додайте це розширення
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
}
}
}
Потім ви можете змінити колір тексту заповнювача за допомогою розкадрування або просто встановивши його так:
textfield.placeHolderTextColor = UIColor.red
Я використовую це в SWIFT:
myTextField.attributedPlaceholder =
NSAttributedString(string: "placeholder", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])
Здається, це працює для інших ... Я не уявляю, чому це раніше не працювало для мене ... можливо, деякі налаштування проекту. Дякую за коментарі. В даний час я не маю можливості перевірити це ще раз.
Застаріле: Але я не знаю, чому, текст застосовано правильно, але колір заповнювача залишається незмінним (чорний / сірий).
--iOS8
Спробуйте це:
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;
Ви можете використовувати наступний код
[txtUsername setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
Це рішення працює без будь-якого підкласу та без будь-яких приватних ivars:
@IBOutlet weak var emailTextField: UITextField! {
didSet {
if emailTextField != nil {
let placeholderText = NSLocalizedString("Tap here to enter", comment: "Tap here to enter")
let placeholderString = NSAttributedString(string: placeholderText, attributes: [NSForegroundColorAttributeName: UIColor(white: 0.66, alpha: 1.0)])
emailTextField.attributedPlaceholder = placeholderString
}
}
}
Відповідь @ DogCoffee у Swift була б такою
let placeholderAttrs = [ NSForegroundColorAttributeName : UIColor.redColor()]
let placeholder = NSAttributedString(string: "Some text", attributes: placeholderAttrs)
textField.attributedPlaceholder = placeholder
Це вдосконалена версія розширення, надана @Medin Piranej вище (до речі, хороша ідея!). Ця версія дозволяє уникнути нескінченного циклу, якщо ви намагаєтесь отримати placeHolderTextColor та запобігає збоям, якщо встановлений колір дорівнює нулю.
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 ?? "")
}
}
}
}
для swift 3, ми можемо використовувати цей код для зміни кольору тексту заповнювача для UITextfield
let placeholderColor = UIColor.red
mytextField.attributedPlaceholder = NSAttributedString(string: mytextField.placeholder, attributes: [NSForegroundColorAttributeName : placeholderColor])