web-dev-qa-db-ja.com

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

this property を使用して、プレースホルダーテキストを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

オーバーライド

-(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];
        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];
}
0
Arshad Parwez