UITextField attributedPlaceholder не влияет
Я пытаюсь сделать placeholders в текстовом поле курсивом, и поскольку мое приложение предназначено для 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
?
Ответы
Ответ 1
Как отметил Уоррен, стиль в настоящее время не может быть выполнен так, как вы пытаетесь. Хорошим обходным решением было бы настроить атрибуты шрифта текстового поля так, как вы хотели бы, чтобы ваш заполнитель выглядел, а затем измените шрифт текстового поля всякий раз, когда пользователь начинает печатать. Это будет выглядеть как заполнитель, а текст - разные шрифты.
Вы можете сделать это, создав делегат текстового поля и используя 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;
}
Ответ 2
Это почти наверняка ошибка. Документация для свойства attributedPlaceholder
утверждает, что строка будет нарисована с использованием серого цвета независимо от атрибута цвета переднего плана, но это не case: вы можете установить цвета переднего плана и фона. К сожалению, атрибут шрифта, по-видимому, удаляется и возвращается к системному шрифту.
В качестве обходного пути я рекомендую переопределить drawPlaceholderInRect:
и самостоятельно зачеркнуть местозаполнитель. Кроме того, вы должны подать на него радар и включить минимальный образец проекта, демонстрирующий ошибку.
Ответ 3
Я просто наткнулся на эту проблему сам. По-видимому, заполнитель будет использовать любой шрифт, которому назначается текстовое поле. Просто установите шрифт текстового поля, и вы хороши.
Для всего остального, как и цвет заполнителя, я все равно вернусь к attributedPlaceholder
Ответ 4
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
}