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

http://msdn.microsoft.com/en-us/library/8edha89s.aspx

В каждом случае один параметр должен быть одного и того же типа как класс или структура, объявляющая оператор (...)

539
задан Bhavin Ramani 3 August 2016 в 05:44
поделиться

4 ответа

Вы можете переопределить drawPlaceholderInRect: (CGRect) rect как таковой, чтобы вручную отобразить текст заполнителя:

- (void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor blueColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]];
}
194
ответ дан 22 November 2019 в 22:18
поделиться

Быстро 5 С ПРОТЕСТОМ.

let attributes = [ NSAttributedString.Key.foregroundColor: UIColor.someColor ]
let placeHolderString = NSAttributedString(string: "DON'T_DELETE", attributes: attributes)
txtField.attributedPlaceholder = placeHolderString

протест, являющийся этим, НЕОБХОДИМО ввести непустое String, где "DON'T_DELETE", даже если та строка установлена в коде в другом месте. Мог бы сохранить Вас пять минут головы-sctratching.

2
ответ дан 22 November 2019 в 22:18
поделиться

Может быть, вы захотите попробовать это, но Apple может предупредить вас о доступе к приватному IVar:

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

ПРИМЕЧАНИЕ
По словам Мартина Аллеуса, это больше не работает на iOS 7.

.
159
ответ дан 22 November 2019 в 22:18
поделиться

Переопределение drawPlaceholderInRect: было бы правильным способом, но он не работает из-за ошибки в API (или документации) .

Метод никогда не вызывается для UITextField .

См. Также drawTextInRect в UITextField not called

Вы можете использовать решение digdog. Поскольку я не уверен, прошел ли это обзор Apple Apples, я выбрал другое решение: наложить на текстовое поле мою собственную метку, имитирующую поведение заполнителя.

Это немного запутано. Код выглядит так (обратите внимание, что я делаю это внутри подкласса TextField):

@implementation PlaceholderChangingTextField

- (void) changePlaceholderColor:(UIColor*)color
{    
    // Need to place the overlay placeholder exactly above the original placeholder
    UILabel *overlayPlaceholderLabel = [[[UILabel alloc] initWithFrame:CGRectMake(self.frame.origin.x + 8, self.frame.origin.y + 4, self.frame.size.width - 16, self.frame.size.height - 8)] autorelease];
    overlayPlaceholderLabel.backgroundColor = [UIColor whiteColor];
    overlayPlaceholderLabel.opaque = YES;
    overlayPlaceholderLabel.text = self.placeholder;
    overlayPlaceholderLabel.textColor = color;
    overlayPlaceholderLabel.font = self.font;
    // Need to add it to the superview, as otherwise we cannot overlay the buildin text label.
    [self.superview addSubview:overlayPlaceholderLabel];
    self.placeholder = nil;
}
4
ответ дан 22 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: