Reputation: 1481
I have a UITextField
with a placeholder. When the user wants to submit the form and he/she hasn't typed anything in the textfield, I would like the placeholder's text color become red. Here are my questions:
I know I can override the method drawPlaceholderInRect:
in a subclass of UITextField
. But if I did this, the text would be always red and as I wrote before, I would like it to become red depending on a user defined action.
The only solution I can think of is to use a "default" text for my UITextField
(the placeholder's text), display it in light grey as long as the user hasn't typed anything and display it in red when I need it. In other words, I would just mock the placeholder's behavior. But of course, this is not very elegant.
Any ideas?
Upvotes: 16
Views: 34390
Reputation: 1724
You can Change the Placeholder textcolor to any color by using the below code. Just try this.
UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
Upvotes: 26
Reputation: 2565
like the answer from verklixt but without accessing private api and using UIAppearance
:
[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor darkGrayColor]];
(tested on 5.0 through 7.1)
Upvotes: 12
Reputation: 51
You can set the placeholder text as a NSAttributedString using this property
NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
Upvotes: 5
Reputation: 703
Just look at this:
Digdog Dig - Change UITextField’s placeholder color without subclassing it
[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
Upvotes: 49
Reputation: 1563
I had some difficulty implementing color change of placeholder, instead I've found another solution which works perfectly for me.
//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];
}
Upvotes: 0
Reputation: 697
We can gain access to place holder label using key path,so that we can change color i.e.:
[self.textField setValue:[UIColor **"your color"**]
forKeyPath:@"_placeholderLabel.textColor"];
Upvotes: 5
Reputation: 6054
override
-(void) drawPlaceholderInRect:(CGRect)rect {
[[UIColor darkGrayColor] setFill];
[[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
Upvotes: 4
Reputation: 2144
when user does not write any thing in textfield. then put this text as a textfield.text text and change font color.
Upvotes: 3