Измените цвет текста заполнителя UITextField программно - PullRequest
15 голосов
/ 07 сентября 2011

У меня есть UITextField с заполнителем. Когда пользователь хочет отправить форму и он / она ничего не набрал в текстовом поле, я бы хотел, чтобы цвет текста заполнителя стал красным. Вот мои вопросы:

  • Будет ли это противоречить рекомендациям Apple по пользовательскому интерфейсу? Я не хочу, чтобы мое приложение было отклонено из-за таких мелких деталей.
  • Как бы я это сделал?

Я знаю, что могу переопределить метод drawPlaceholderInRect: в подклассе UITextField. Но если бы я сделал это, текст всегда был бы красным, и, как я уже писал ранее, я бы хотел, чтобы он стал красным в зависимости от действия, определенного пользователем.

Единственное решение, которое я могу придумать, - это использовать текст по умолчанию для моего UITextField (текст заполнителя), отображать его светло-серым, пока пользователь ничего не печатал, и отображать его красным Мне это надо. Другими словами, я бы просто высмеял поведение заполнителя. Но, конечно, это не очень элегантно.

Есть идеи?

Ответы [ 8 ]

48 голосов
/ 13 сентября 2011

Просто посмотрите на это:

Digdog Dig - Изменить цвет заполнителя UITextField без его подкласса

[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
24 голосов
/ 07 мая 2014

Вы можете изменить цвет текста заполнителя на любой цвет, используя приведенный ниже код. Просто попробуйте это.

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
12 голосов
/ 14 марта 2013

как ответ от verklixt, но без доступа к частному API и использования UIAppearance:

[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor darkGrayColor]];

(протестировано с 5.0 по 7.1)

5 голосов
/ 26 марта 2014

Вы можете установить заполнитель текста как NSAttributedString, используя это свойство

NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I     am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
5 голосов
/ 24 февраля 2012

Мы можем получить доступ к метке-заполнителю, используя ключевой путь, так что мы можем изменить цвет, т.е.

[self.textField setValue:[UIColor **"your color"**] 
                                  forKeyPath:@"_placeholderLabel.textColor"];
4 голосов
/ 16 января 2012

переопределить

-(void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor darkGrayColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
2 голосов
/ 07 сентября 2011

когда пользователь не пишет ничего в текстовом поле.затем поместите этот текст как текст textfield.text и измените цвет шрифта.

0 голосов
/ 02 марта 2012

Мне было трудно реализовать изменение цвета заполнителя, вместо этого я нашел другое решение, которое идеально подходит для меня.

//On button action change color to red
-(void)btnAction
{
    // authentication for missing textfields
    if ([textField_firstName.text isEqualToString:@""])
    {
        textField_firstName.textColor=[UIColor redColor];
        textField_firstName.text=@"Enter First Name";
    }
}

// in the delegate method of UITextField change the following 
- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    //match the following string with above string and change the string to empty string on textfield click
    if ([textField_firstName.text isEqualToString:@"Enter First Name" ]) 
    {
        textField_firstName.text=@"";
    }

    //change back to the text color you use
    textField_firstName.textColor=[UIColor blackColor];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...