UITextField attributedPlaceholder не имеет эффекта
Я пытаюсь сделать заполнители в моих текстовых полях курсивными, и поскольку мое приложение ориентировано на iOS 6.0 или более новую версию, решил использовать свойство attributedPlaceholder
вместо того, чтобы накатывать что-то более обычное. Код выглядит следующим образом:
NSString *plString = @"optional";
NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:plString
attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:15]}];
for (UITextField *t in myTextfields){
t.placeholder = plString;
t.attributedPlaceholder = placeholder;
}
Тем не менее стиль заполнителя все еще не курсив, но такой же, как обычный текст, только более тусклый. Чего мне не хватает, чтобы заставить NSAttributedString
работать?
4 ответа:
Как отметил Уоррен, стиль в настоящее время не может быть выполнен так, как вы пытаетесь. Хорошим обходным путем было бы настроить атрибуты шрифта вашего текстового поля так, как вы хотели бы, чтобы ваш заполнитель выглядел, а затем изменить шрифт текстового поля всякий раз, когда пользователь начинает печатать. Он будет выглядеть так, как будто заполнитель и текст-это разные шрифты.
Это можно сделать, создав делегат текстового поля и используя shouldChangeCharactersinRange следующим образом:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { // If there is text in the text field if (textField.text.length + (string.length - range.length) > 0) { // Set textfield font textField.font = [UIFont fontWithName:@"Font" size:14]; } else { // Set textfield placeholder font (or so it appears) textField.font = [UIFont fontWithName:@"PlaceholderFont" size:14]; } return YES; }
Это почти наверняка ошибка. Документация для свойства
attributedPlaceholder
утверждает, что строка будет отрисована с использованием серого цвета независимо от атрибута цвета переднего плана, но это не так: вы можете установить как цвет переднего плана, так и цвет фона. К сожалению, атрибут шрифта, по-видимому, удаляется и возвращается к системному шрифту.В качестве обходного пути я рекомендую переопределить
drawPlaceholderInRect:
и нарисовать заполнитель самостоятельно. Кроме того, вы должны подать Радар на этом и включает в себя минимальный пример проекта, который демонстрирует ошибку.
Я только что сам наткнулся на этот вопрос. По-видимому, заполнитель будет принимать любой шрифт, назначенный текстовому полю. Просто установите шрифт текстового поля, и Вы хороши.
Для всего остального, как цвет заполнителя, я бы все равно вернулся к
attributedPlaceholder
IOS8 / 9 / Swift 2.0-рабочий пример
func colorPlaceholderText(){ var multipleAttributes = [String : NSObject]() multipleAttributes[NSForegroundColorAttributeName] = UIColor.appColorCYAN() //OK - comment in if you want background color //multipleAttributes[NSBackgroundColorAttributeName] = UIColor.yellowColor() //OK - Adds underline //multipleAttributes[NSUnderlineStyleAttributeName] = NSUnderlineStyle.StyleDouble.rawValue let titleString = "Search port/country/vessel..." let titleAttributedString = NSAttributedString(string: titleString, attributes: multipleAttributes) self.textFieldAddSearch.attributedPlaceholder = titleAttributedString }