it-swarm.com.ru

Измените цвет текста заполнителя UITextField программно

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

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

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

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

Есть идеи?

15
strave

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

2
Ron

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

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

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

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

UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
24
Atanu Mondal

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

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

(проверено на 5.0 до 7.1)

12
glasz

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

NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I     am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
5
Matt

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

[self.textField setValue:[UIColor **"your color"**] 
                                  forKeyPath:@"_placeholderLabel.textColor"];
5
Eshwar Chaitanya

переопределение

-(void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor darkGrayColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
4
harshalb

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

//On button action change color to red
-(void)btnAction
{
    // authentication for missing textfields
    if ([textField_firstName.text isEqualToString:@""])
    {
        textField_firstName.textColor=[UIColor redColor];
        [email protected]"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" ]) 
    {
        [email protected]"";
    }

    //change back to the text color you use
    textField_firstName.textColor=[UIColor blackColor];
}
0
Arshad Parwez