Подтвердить что ты не робот

Как установить цвет текста держателя места для UITextField при сохранении его существующих свойств?

Я видел несколько ответов, которые показывают, как изменить цвет текста placeHolder для UITextField, переопределив метод drawPlaceholderInRect: такой, как этот:

iPhone UITextField - Изменить цвет текста заполнителя

но это не поддерживает существующие атрибуты, такие как выравнивание, шрифт и т.д., что является лучшим способом решить эту проблему?

4b9b3361

Ответ 1

Есть действительно лучший способ справиться с этим сейчас. Это будет работать для iOS 6 и 7.

(Обратите внимание, что в этом примере я создал код в AwakeFromNib, так как он не будет менять цвета после его установки. Но если вы не используете XIB, вам придется изменить место, где вы помещаете этот код, например, в drawPlaceholderInRect,)

В этом примере мы создаем подкласс UITextField, переопределяем awakeFromNib и затем устанавливаем цвет текста placeHolder красным:

- (void)awakeFromNib
{
    if ([self.attributedPlaceholder length])
    {
        // Extract attributes
        NSDictionary * attributes = (NSMutableDictionary *)[ (NSAttributedString *)self.attributedPlaceholder attributesAtIndex:0 effectiveRange:NULL];

        NSMutableDictionary * newAttributes = [[NSMutableDictionary alloc] initWithDictionary:attributes];

        [newAttributes setObject:[UIColor redColor] forKey:NSForegroundColorAttributeName];

        // Set new text with extracted attributes
        self.attributedPlaceholder = [[NSAttributedString alloc] initWithString:[self.attributedPlaceholder string] attributes:newAttributes];

    }
}

Самое приятное в этом подходе заключается в том, что он поддерживает текущие свойства UITextField для строки placeHolder, и поэтому позволит вам работать в IB для большей части того, что вы установили. Кроме того, он намного эффективнее, чем делать каждый раз, когда вам нужно рисовать. Он также позволяет вам изменять любое другое свойство, которое вы хотите, на текст placeHolder, сохраняя при этом остальные свойства.

Как уже упоминалось выше, если вы не используете XIB, вам нужно будет позвонить это в другое время. Если вы поместите этот код в метод drawPlaceholderInRect: затем убедитесь, что вы вызываете [super drawPlaceholderInRect:] в конце его.

Ответ 2

Из iOS 6,

Без какого-либо подкласса можно выполнить это с помощью пары строк кода:

UIColor *color = [UIColor blackColor];
textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];

Ответ 3

Существует несколько способов достижения этого.

Использование конструктора интерфейсов или раскадровки

  • Выберите текстовое поле, для которого вы хотите изменить цвет заполнителя.
  • перейдите в меню инспектора удостоверений в правом верхнем углу Xcode
  • Добавьте пару значений ключа таким образом

Путь к ключу= _placeholderLabel.textColor

Выберите атрибут "Тип" и "Цвет".

Затем выберите цвет в значении.

введите описание изображения здесь

Установить цвет заливки с помощью кода:

Процесс 1:

[textField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];

Процесс 2:

Переопределить метод drawPlaceholderInRect: (CGRect) rect

- (void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor blueColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:14]];
}

Ответ 4

Безопасный способ настройки UITextField s placeholder заключается в подклассе UITextField и переопределении placeholderRectForBounds:, Apple не будет беспокоить вас на этом. Однако, если вы хотите рискнуть, вы можете попробовать таким образом:

[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];

Источник.