プレースホルダー付きのUITextField
があります。ユーザーがフォームを送信したいが、テキストフィールドに何も入力していない場合、プレースホルダーのテキストの色を赤にしたいと思います。これが私の質問です:
メソッドをオーバーライドできることはわかっていますdrawPlaceholderInRect:
UITextField
のサブクラス。しかし、これを行うと、テキストは常に赤になり、前に書いたように、ユーザー定義のアクションに応じて赤になりたいと思います。
私が考えることができる唯一の解決策は、UITextField
(プレースホルダーのテキスト)に「デフォルト」のテキストを使用し、ユーザーが何も入力していない限り薄い灰色で表示し、次の場合は赤で表示することです。それが必要。つまり、プレースホルダーの動作をモックするだけです。しかしもちろん、これはあまりエレガントではありません。
何か案は?
ユーザーがテキストフィールドに何も書き込まない場合。次に、このテキストをtextfield.textテキストとして配置し、フォントの色を変更します。
これを見てください:
Digdog Dig-UITextFieldのプレースホルダーの色をサブクラス化せずに変更します
[self.MyTextField setValue:[UIColor darkGrayColor] forKeyPath:@"_placeholderLabel.textColor"];
以下のコードを使用して、プレースホルダーのテキストの色を任意の色に変更できます。これを試してみてください。
UIColor *color = [UIColor lightTextColor];
YOURTEXTFIELD.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"PlaceHolder Text" attributes:@{NSForegroundColorAttributeName: color}];
verklixtからの回答と同様ですが、プライベートAPIにアクセスせず、UIAppearance
を使用しません。
[[UILabel appearanceWhenContainedIn:[UITextField class], nil] setTextColor:[UIColor darkGrayColor]];
(5.0から7.1でテスト済み)
this property を使用して、プレースホルダーテキストをNSAttributedStringとして設定できます。
NSAttributedString *coloredPlaceholder = [[NSAttributedString alloc] initWithString:@"I am a placeholder string" attributes:@{NSForegroundColorAttributeName: [UIColor redColor]}];
[self.textField setAttributedPlaceholder:coloredPlaceholder];
キーパスを使用してプレースホルダーラベルにアクセスできるため、色を変更できます。
[self.textField setValue:[UIColor **"your color"**]
forKeyPath:@"_placeholderLabel.textColor"];
オーバーライド
-(void) drawPlaceholderInRect:(CGRect)rect {
[[UIColor darkGrayColor] setFill];
[[self placeholder] drawInRect:rect withFont:[UIFont fontWithName:@"Helvetica-Oblique" size:15.0]];
}
プレースホルダーの色の変更を実装するのに少し苦労しましたが、代わりに私にとって完璧に機能する別の解決策を見つけました。
//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];
}