iPhone UITextField-プレースホルダーのテキストの色を変更する


566

UITextFieldコントロールで設定したプレースホルダーテキストの色を変更して、黒にします。

通常のテキストをプレースホルダーとして使用せず、すべてのメソッドをオーバーライドしてプレースホルダーの動作を模倣することなく、これを実行したいと思います。

私はこのメソッドをオーバーライドすると信じています:

- (void)drawPlaceholderInRect:(CGRect)rect

その後、私はこれを行うことができるはずです。しかし、このメソッド内から実際のプレースホルダーオブジェクトにアクセスする方法がわかりません。

回答:


804

iOS 6のUIViewsで属性付き文字列が導入されてから、次のようにプレースホルダーテキストに色を割り当てることができます。

if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) {
  UIColor *color = [UIColor blackColor];
  textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholderText attributes:@{NSForegroundColorAttributeName: color}];
} else {
  NSLog(@"Cannot set placeholder text's color, because deployment target is earlier than iOS 6.0");
  // TODO: Add fall-back code to set placeholder color.
}

2
これは良いです-しかし、あなたはこれが動作する前に、IBでプレースホルダの値を設定する必要が覚えている
gheese

4
これもまた、respondsToSelector呼び出しでラップする価値があります。これがないと、このコードは6.0より前のデプロイメントターゲットでクラッシュします(認識されないセレクターがインスタンスに送信されます)
gheese

5
のドキュメントではattributedPlaceholder、色を除いてテキスト属性を使用しています。
Matt Connolly

1
属性に対して機能しない理由-NSFontAttributeName[[NSAttributedString alloc] initWithString:@"placeholder" attributes: @{NSForegroundColorAttributeName: color, NSFontAttributeName : font}];
dev4u

3
iOS 7で次のエラーが発生しました:[<UITextField 0x11561d90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key _field.
i_am_jorf

237

簡単で痛みのない、いくつかのための簡単な代替手段になる可能性があります。

_placeholderLabel.textColor

制作は推奨されませんが、Appleは提出を拒否する場合があります。


1
これを本番環境で使用していますか?私は私有地にアクセスするつもりです。
GeriBorbás2014年

11
コピーと貼り付けをすばやく行うために、回答にテキストを追加してください。_placeholderLabel.textColor
Philiiiiiipp 2014

47
この方法を使用しないでください。これとituneストアを使用したため、アプリケーションが拒否されました。
Asad ali 2015

1
私はどんな種類のプライベートライブラリメソッドも解決策として推奨されるべきではないと思います
Skrew

2
@jungledev _placeholderLabelは私有地です。このソリューションは、プライベートAPIの使用が拒否される可能性があります。
Sean Kladek、2018

194

このdrawPlaceholderInRect:(CGRect)rectようにオーバーライドして、プレースホルダーテキストを手動でレンダリングできます。

- (void) drawPlaceholderInRect:(CGRect)rect {
    [[UIColor blueColor] setFill];
    [[self placeholder] drawInRect:rect withFont:[UIFont systemFontOfSize:16]];
}

44
のようなもの[self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];がおそらくより良いです。そのようにあなたはtextAlignment財産を尊重するでしょう。これをSSTextFieldクラスに追加しました。プロジェクトで自由に使用してください。
Sam Soffes、2011

52
Kotegが言ったことを絶対に行わないでください。カテゴリを通じてメソッドをオーバーライドしないでください。EVER
ジョシュアウェインバーグ

8
@JoshuaWeinbergあなたの提案の背後に何か特別な理由がありますか?
クリシュナン

5
カテゴリに重複するメソッドを実装する@クリシュナンはサポートされていません。どのメソッドが呼び出されるか、または両方が呼び出されるかどうか、または呼び出される順序を確認することはできません。
ショーンウッドワード

8
iOS7では、CGRectInset(rect、0、(rect.size.height-self.font.lineHeight)/ 2.0)を使用してテキストを垂直方向に中央揃えすることで、四角形を変更できます。
Brian S

171

以下のコードを使用して、プレースホルダーのテキストの色を任意の色に変更できます。

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

6
ベストアンサーが提案されました。機能し、文書化されたAPIを使用します。
Ian Hoar 14

2
UISearchBarでこれをどのように機能させますか?attributedPlaceholderプロパティはありません。
gilsaints88 2014年

1
この答えは正しくありません-ドキュメントによると、attributedPlaceholderのテキストの色情報は無視されdeveloper.apple.com/library/ios/documentation/UIKit/Reference/...
アドレー大声

みんな、ありがとう。それはいくつかの助けになったと思います。Adlai Hollerが試してみました!!! この回答は、以前のバージョンのiOSに対するものでした。より良い答えがある場合は、提案を受け付けています。
まんじゅ

attributedPlaceholderプロパティがないため、iOS8では機能しません
Ben Clayton

157

たぶんあなたはこの方法を試したいかもしれませんが、Appleはプライベートivarへのアクセスについてあなたに警告するかもしれません:

[self.myTextField setValue:[UIColor darkGrayColor] 
                forKeyPath:@"_placeholderLabel.textColor"];


MartinAlléusによると、これはiOS 7では機能しなくなりました。


6
アプリでこの方法を使用しています。レビューはまあまあでした。なので、使ってもいいと思います。
マイケルA.

9
これはアプリストアの安全ではなく、推奨されません。これらの手法で承認されるか、承認されたままであるかは保証されません。
Sveinung Kval Bakken 2012

31
承認されているかどうかは問題ではありません。重要なことは、これにより将来のOSアップデートでアプリが壊れる可能性があるということです。
pablasso 2013年

2
iOS 7には何の問題もありません...このメモにも関わらず試してみましたが、問題なく動作するようで、過去にこのアプローチを問題なく使用しました。
WCByrne 2013年

6
これは、常に悪い考えだった、と今ではiOSの13に壊れて:Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug😈
ライダーマッカイ

154

これはSwift <3.0で動作します:

myTextField.attributedPlaceholder = 
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.redColor()])

iOS 8.2およびiOS 8.3ベータ4でテスト済み。

スウィフト3:

myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSForegroundColorAttributeName : UIColor.red])

スウィフト4:

myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSAttributedStringKey.foregroundColor: UIColor.red])

Swift 4.2:

myTextfield.attributedPlaceholder =
NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

iOS8.2でソリューションを使用すると、魅力のように動作します。ここで完璧なソリューション。目的Cでも使用します。
Akshit Zaveri 2015

73

Swiftの場合:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSForegroundColorAttributeName: UIColor.blackColor()])
}

Swift 4.0の場合:

if let placeholder = yourTextField.placeholder {
    yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder, 
        attributes: [NSAttributedStringKey.foregroundColor: UIColor.black])
}

呼び出す前にプレースホルダーテキストを設定しなかった場合、アプリがクラッシュします
apinho

これは最高です、ありがとう。@apinho何もここでクラッシュしません
マーカス

// Swift 4では、placeholder = yourTextField.placeholder {yourTextField.attributedPlaceholder = NSAttributedString(string:placeholder、attributes:[NSAttributedStringKey.foregroundColor:UIColor.white])}
Ronaldo Albertini

このコードの実行後にプレースホルダーのテキスト値を変更すると、デフォルトのプレースホルダーの色に戻ることに注意してください。
Alessandro Vendruscolo 2017

66

Swift 3.0 +ストーリーボード

ストーリーボードのプレースホルダーの色を変更するには、次のコードで拡張機能を作成します。(このコードを自由に更新してください。考えれば、より明確で安全になる可能性があります)。

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            guard let currentAttributedPlaceholderColor = attributedPlaceholder?.attribute(NSForegroundColorAttributeName, at: 0, effectiveRange: nil) as? UIColor else { return UIColor.clear }
            return currentAttributedPlaceholderColor
        }
        set {
            guard let currentAttributedString = attributedPlaceholder else { return }
            let attributes = [NSForegroundColorAttributeName : newValue]

            attributedPlaceholder = NSAttributedString(string: currentAttributedString.string, attributes: attributes)
        }
    }
}

ここに画像の説明を入力してください

Swift 4バージョン

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear
        }
        set {
            guard let attributedPlaceholder = attributedPlaceholder else { return }
            let attributes: [NSAttributedStringKey: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

Swift 5バージョン

extension UITextField {
    @IBInspectable var placeholderColor: UIColor {
        get {
            return attributedPlaceholder?.attribute(.foregroundColor, at: 0, effectiveRange: nil) as? UIColor ?? .clear
        }
        set {
            guard let attributedPlaceholder = attributedPlaceholder else { return }
            let attributes: [NSAttributedString.Key: UIColor] = [.foregroundColor: newValue]
            self.attributedPlaceholder = NSAttributedString(string: attributedPlaceholder.string, attributes: attributes)
        }
    }
}

コンパイラはそれを見つけることができませんNSAttributedStringKey
ミラノカミルヤ2018年

iOS 13で動作
Jalil

43

以下は、iOS6 +の場合のみです(Alexander Wのコメントに示されています)。

UIColor *color = [UIColor grayColor];
nameText.attributedPlaceholder =
   [[NSAttributedString alloc]
       initWithString:@"Full Name"
       attributes:@{NSForegroundColorAttributeName:color}];

33

私はすでにこの問題に直面していました。私の場合、以下のコードは正しいです。

目的C

[textField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

Swift 4.Xの場合

tf_mobile.setValue(UIColor.white, forKeyPath: "_placeholderLabel.textColor")

iOS 13 Swiftコードの場合

tf_mobile.attributedPlaceholder = NSAttributedString(string:"PlaceHolder Text", attributes: [NSAttributedString.Key.foregroundColor: UIColor.red])

iOS 13の場合は以下のコードも使用できます

let iVar = class_getInstanceVariable(UITextField.self, "_placeholderLabel")!
let placeholderLabel = object_getIvar(tf_mobile, iVar) as! UILabel
placeholderLabel.textColor = .red

これがあなたに役立つことを願っています。


@Ashuにより、iOS 13でクラッシュが発生する 'UITextFieldの_placeholderLabel ivarへのアクセスは禁止されています。これはアプリケーションのバグです。ビルドすることすらできません
。AppStore

1
これは制限されたIOS 13はこれをもう使用できません
Kishore Kumar

ObjcコードはIOS 13でテストされており、機能しません。
Mehdico

1
@Mehdico私はiOS 13の回答を更新しました。これがお役に立てば幸いです。
Ashu

viewWillAppearまたはでこの変更を行う必要があることを知るには、あまりにも長くかかりすぎましたviewDidAppearviewDidLoad早すぎる。
4

32

これにより、iOSでテキストフィールドのプレースホルダーテキストの色を変更できます

[self.userNameTxt setValue:[UIColor colorWithRed:41.0/255.0 green:91.0/255.0 blue:106.0/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];

1
iOS13以降、これは機能しません
Teddy

@テディどうやって今やったの?私はこれで問題を抱え始めました。
ジャリル

@ジャリル私はあなたのためにまだ時間通りであることを望みます。textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@ "text" attributes:@ {NSForegroundColorAttributeName:[UIColor colorWithHexString:@ "ffffff55"]}];
テディ

18

UIAppearanceメソッドを使用しないのはなぜですか。

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

よく働く!テキストの色は影響を受けません(少なくともtextColorプロパティのプロキシが異なる場合)
HotJard

18

ストーリーボードにもあり、コードは1行もありません

ここに画像の説明を入力してください


1
どうしてこれを知ったの?それは私が考える最良のアプローチですが、これをどのようにして知ることができますか?私はiosプログラミングに慣れていないことを教えてください。
Yawar

2
それは非常に普遍的です。それがどこでもそれを使用することを知ったら;)
Petr Syrov

その背後で何が実行されているかを理解したら、それを頻繁に使用することを知っています。しかし、私は「_placeholderLabel.textColor」を意味します。これはテキストフィールドの子ビューである必要があります。コントロールに関するこの種の情報を確認する方法はありますか?
Yawar

2
@Yawar Xcodeでビュー階層インスペクターを使用するか、デバッガーでビューをイントロスペクトできます。
David Ganster、2016年

テキストフィールドに関係なく、キーパスに同じ「タイル/名前」を使用できます
Naishta

16

Swift 3.X

textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes:[NSForegroundColorAttributeName: UIColor.black])

迅速に5

textField.attributedPlaceholder = NSAttributedString(string: "placeholder text", attributes: [NSAttributedString.Key.foregroundColor : UIColor.black])

12

iOS 6.0以降の場合

[textfield setValue:your_color forKeyPath:@"_placeholderLabel.textColor"];

それが役に立てば幸い。

注: プライベートAPIにアクセスしているため、Appleはアプリを拒否する場合があります(0.01%の確率)。私は2年間からすべてのプロジェクトでこれを使用していますが、Appleはこれを要求しませんでした。


terminating with uncaught exception of type NSExceptioniOS8のをスローします
Yar

10

Xamarin.iOS開発者は、このドキュメントhttps://developer.xamarin.com/api/type/Foundation.NSAttributedString/から見つけました

textField.AttributedPlaceholder = new NSAttributedString ("Hello, world",new UIStringAttributes () { ForegroundColor =  UIColor.Red });

ありがとうございました !!私は最初にCTStringAttributesを使用し、UIStringAttributesを使用していなかったため、それを理解できませんでした。:この使用しないように注意してくださいnew NSAttributedString("placeholderstring", new CTStringAttributes() { ForegroundColor = UIColor.Blue.CGColor });
ヨハンDahmani

9

Swiftバージョン。おそらくそれは誰かを助けるでしょう。

class TextField: UITextField {
   override var placeholder: String? {
        didSet {
            let placeholderString = NSAttributedString(string: placeholder!, attributes: [NSForegroundColorAttributeName: UIColor.whiteColor()])
            self.attributedPlaceholder = placeholderString
        }
    }
}

6

カテゴリーFTW。効果的な色の変化を確認するために最適化できます。


#import <UIKit/UIKit.h>

@interface UITextField (OPConvenience)

@property (strong, nonatomic) UIColor* placeholderColor;

@end

#import "UITextField+OPConvenience.h"

@implementation UITextField (OPConvenience)

- (void) setPlaceholderColor: (UIColor*) color {
    if (color) {
        NSMutableAttributedString* attrString = [self.attributedPlaceholder mutableCopy];
        [attrString setAttributes: @{NSForegroundColorAttributeName: color} range: NSMakeRange(0,  attrString.length)];
        self.attributedPlaceholder =  attrString;
    }
}

- (UIColor*) placeholderColor {
    return [self.attributedPlaceholder attribute: NSForegroundColorAttributeName atIndex: 0 effectiveRange: NULL];
}

@end

6

iOS7で、垂直方向と水平方向の両方の配置、およびプレースホルダーの色を処理します。drawInRectおよびdrawAtPointは、現在のコンテキストfillColorを使用しなくなりました。

https://developer.apple.com/library/ios/documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/CustomTextProcessing/CustomTextProcessing.html

Obj-C

@interface CustomPlaceHolderTextColorTextField : UITextField

@end


@implementation CustomPlaceHolderTextColorTextField : UITextField


-(void) drawPlaceholderInRect:(CGRect)rect  {
    if (self.placeholder) {
        // color of placeholder text
        UIColor *placeHolderTextColor = [UIColor redColor];

        CGSize drawSize = [self.placeholder sizeWithAttributes:[NSDictionary dictionaryWithObject:self.font forKey:NSFontAttributeName]];
        CGRect drawRect = rect;

        // verticially align text
        drawRect.origin.y = (rect.size.height - drawSize.height) * 0.5;

        // set alignment
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = self.textAlignment;

        // dictionary of attributes, font, paragraphstyle, and color
        NSDictionary *drawAttributes = @{NSFontAttributeName: self.font,
                                     NSParagraphStyleAttributeName : paragraphStyle,
                                     NSForegroundColorAttributeName : placeHolderTextColor};


        // draw
        [self.placeholder drawInRect:drawRect withAttributes:drawAttributes];
    }
}

@end

テキストを垂直方向に正しく中央揃えするこの優れたソリューションに感謝します(カスタムフォントで便利です)私が追加する唯一のものは、このソリューションがiOS 6以前と互換性がないことです([self.placeholder drawInRect:rect withFont:self.font lineBreakMode:NSLineBreakByTruncatingTail alignment:self.textAlignment]にフォールバックすることで修正できます)
lifjoy 14

6

iOS 6以降はで提供attributedPlaceholderしていますUITextField。iOS 3.2以降はで提供setAttributes:range:していますNSMutableAttributedString

次のことができます。

NSMutableAttributedString *ms = [[NSMutableAttributedString alloc] initWithString:self.yourInput.placeholder];
UIFont *placeholderFont = self.yourInput.font;
NSRange fullRange = NSMakeRange(0, ms.length);
NSDictionary *newProps = @{NSForegroundColorAttributeName:[UIColor yourColor], NSFontAttributeName:placeholderFont};
[ms setAttributes:newProps range:fullRange];
self.yourInput.attributedPlaceholder = ms;

問題の原因がわからないため、viewdidLoadでこのコードを呼び出しました。新しい色とフォントサイズは再描画後にのみ表示されます。これと一緒に他に何かする必要がありますか?
Vinayaka Karjigi 2013年

解決しました。UITextfieldのフォントをプレースホルダーテキストに使用する前に、そのフォントを設定するのを忘れていました。私の悪い
ビナヤカカルジギ2013年

6

Swift 4.1のこのソリューション

    textName.attributedPlaceholder = NSAttributedString(string: textName.placeholder!, attributes: [NSAttributedStringKey.foregroundColor : UIColor.red])

4

オーバーライドdrawPlaceholderInRect:は正しい方法ですが、API(またはドキュメント)のバグが原因で機能しません。

メソッドがで呼び出されることはありませんUITextField

呼び出されないUITextFieldのdrawTextInRectも参照してください

あなたはdigdogのソリューションを使用するかもしれません。それがApplesのレビューを通過するかどうかはわからないので、私は別のソリューションを選択しました。プレースホルダーの動作を模倣する独自のラベルでテキストフィールドをオーバーレイします。

これは少し厄介ですが。コードは次のようになります(TextFieldのサブクラス内でこれを行っていることに注意してください)。

@implementation PlaceholderChangingTextField

- (void) changePlaceholderColor:(UIColor*)color
{    
    // Need to place the overlay placeholder exactly above the original placeholder
    UILabel *overlayPlaceholderLabel = [[[UILabel alloc] initWithFrame:CGRectMake(self.frame.origin.x + 8, self.frame.origin.y + 4, self.frame.size.width - 16, self.frame.size.height - 8)] autorelease];
    overlayPlaceholderLabel.backgroundColor = [UIColor whiteColor];
    overlayPlaceholderLabel.opaque = YES;
    overlayPlaceholderLabel.text = self.placeholder;
    overlayPlaceholderLabel.textColor = color;
    overlayPlaceholderLabel.font = self.font;
    // Need to add it to the superview, as otherwise we cannot overlay the buildin text label.
    [self.superview addSubview:overlayPlaceholderLabel];
    self.placeholder = nil;
}

あなたのレビューフレンドリーなソリューションを共有することについてどう思いますか?
adam

使用したソリューションを追加しました。これは少し前だったので、少し掘る必要がありました:)
henning77

私はこれと似たようなことをしましたが、コードをカテゴリに配置し、それを可視にするかどうかに関するshouldChangeCharactersのチェックを行う必要がありました。これは、-(void)overlayPlaceholderVisible:(BOOL)visible ;
David van Dugteren、2013年

3

私はxcodeを初めて使用し、同じ効果を回避する方法を見つけました。

希望する形式のプレースホルダーの代わりにuilabelを配置して非表示にしました

- (void)textFieldDidBeginEditing:(UITextField *)textField
{
    switch (textField.tag)
    {
        case 0:
            lblUserName.hidden=YES;
            break;

        case 1:
            lblPassword.hidden=YES;
            break;

        default:
            break;
    }
}

実際の解決策ではなく回避策に同意しますが、効果は同じで、このリンクから取得しました

注: iOS 7でも動作します:|


3

警告付きのSwift 5。

let attributes = [ NSAttributedString.Key.foregroundColor: UIColor.someColor ]
let placeHolderString = NSAttributedString(string: "DON'T_DELETE", attributes: attributes)
txtField.attributedPlaceholder = placeHolderString

Stringその文字列が他の場所のコードで設定されている場合でも、 "DON'T_DELETE"は空ではない場所に入力する必要があることに注意してください。5分の頭痛を軽減できます。


2

私がiOS7以下でできる最善のことは:

- (CGRect)placeholderRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)editingRectForBounds:(CGRect)bounds {
  return [self textRectForBounds:bounds];
}

- (CGRect)textRectForBounds:(CGRect)bounds {
  CGRect rect = CGRectInset(bounds, 0, 6); //TODO: can be improved by comparing font size versus bounds.size.height
  return rect;
}

- (void)drawPlaceholderInRect:(CGRect)rect {
  UIColor *color =RGBColor(65, 65, 65);
  if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
    [self.placeholder drawInRect:rect withAttributes:@{NSFontAttributeName:self.font, UITextAttributeTextColor:color}];
  } else {
    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font];
  }
}

2

Monotouch(Xamarin.iOS)を使用している人のために、C#に翻訳されたAdamの答えは次のとおりです。

public class MyTextBox : UITextField
{
    public override void DrawPlaceholder(RectangleF rect)
    {
        UIColor.FromWhiteAlpha(0.5f, 1f).SetFill();
        new NSString(this.Placeholder).DrawString(rect, Font);
    }
}

すごい。これは本当に明白ではありませんでした。おそらく時間を節約できたでしょう:)しかし、私はあなたの解決策を編集しましたFont。テキストフィールドのプロパティでフォントセットを使用する方が良いと思うからです。
Wolfgang Schreurs

1

プレースホルダーの配置を維持する必要があったので、アダムの答えは私には十分ではありませんでした。

これを解決するために、私もあなたの一部を助けることを願う小さなバリエーションを使用しました:

- (void) drawPlaceholderInRect:(CGRect)rect {
    //search field placeholder color
    UIColor* color = [UIColor whiteColor];

    [color setFill];
    [self.placeholder drawInRect:rect withFont:self.font lineBreakMode:UILineBreakModeTailTruncation alignment:self.textAlignment];
}

UILineBreakModeTailTruncationはiOS 6の時点で非推奨です
。– Supertecnoboff

1
[txt_field setValue:ColorFromHEX(@"#525252") forKeyPath:@"_placeholderLabel.textColor"];

これについての少しのヒントは、あなたがプライベートiVar(_placeholderLabel)にアクセスしていることであり、過去にAppleはそれをすることについて少し気まぐれでした。:)
Alexander W

1

複数の色を持つ属性付きテキストフィールドプレースホルダーのセットの場合、

テキストを指定するだけで、

  //txtServiceText is your Textfield
 _txtServiceText.placeholder=@"Badal/ Shah";
    NSMutableAttributedString *mutable = [[NSMutableAttributedString alloc] initWithString:_txtServiceText.placeholder];
     [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor whiteColor] range:[_txtServiceText.placeholder rangeOfString:@"Badal/"]]; //Replace it with your first color Text
    [mutable addAttribute: NSForegroundColorAttributeName value:[UIColor orangeColor] range:[_txtServiceText.placeholder rangeOfString:@"Shah"]]; // Replace it with your secondcolor string.
    _txtServiceText.attributedPlaceholder=mutable;

出力:-

ここに画像の説明を入力してください


0

サブクラス化を必要としない別のオプション-プレースホルダーを空白のままにし、ラベルを編集ボタンの上に配置します。プレースホルダーを管理するのと同じようにラベルを管理します(ユーザーが何かを入力するとクリアされます。)


これはテキストフィールドが1つあれば効率的だと思いますが、よりグローバルな規模でこの変更を行おうとすると、このソリューションはプロジェクトにかなりのオーバーヘッドを追加します。
James Parker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.