2

回答が示唆するように、カスタムUITextFieldのプレースホルダーテキストの色を取得するカスタムがあります。ただし、実行時にプレースホルダー テキストの色も変更したいので、プロパティを作成しました。

// Overide the placholder text color
- (void) drawPlaceholderInRect:(CGRect)rect
{
    [self.placeholderTextColor setFill];
    [self.placeholder drawInRect:rect
                        withFont:self.font
                   lineBreakMode:UILineBreakModeTailTruncation
                       alignment:self.textAlignment];
}

- (void) setPlaceholderTextColor:(UIColor *)placeholderTextColor
{
    // To verify this is being called and that the placeholder property is set
    NSLog(@"placeholder text: %@", self.placeholder); 

    _placeholderTextColor = placeholderTextColor;
    [self setNeedsDisplay]; // This does not trigger drawPlaceholderInRect
}

問題は、drawPlaceholderInRect を直接呼び出すべきではないとドキュメントに記載されており、機能しない[self setNeedsDisplay];ことです。何か案は?

4

3 に答える 3

6

このdrawPlaceholderInRect:メソッドは、テキスト フィールドにプレースホルダー文字列が実際に含まれている場合にのみ呼び出されます。(デフォルトではありません)

Interface Builder でテキストフィールドのプレースホルダー文字列を設定してみてください。また、[カスタム クラス]フィールド
にサブクラスを設定してください。

更新:
質問に記載されている問題を再現しようとしましたが、その問題にも遭遇しました。この Stack Overflow の質問によると、これは一般的な問題のようです: https://stackoverflow.com/a/2581866/100848

回避策として (少なくとも iOS >= 6.0 を対象とする場合)、UITextField の attributedPlaceHolder を使用できます。

NSMutableAttributedString* attributedString = [[NSMutableAttributedString alloc] initWithString:@"asdf"];
NSDictionary* attributes = @{NSForegroundColorAttributeName:[UIColor redColor]};
[attributedString setAttributes:attributes range:NSMakeRange(0, [attributedString length])];
[self.textField setAttributedPlaceholder:attributedString];
于 2013-06-02T12:23:37.667 に答える