62

次のコードでプレースホルダーのテキストの色を変更していますが、NSFontAttribute を追加しようとするとコンパイラ エラーが発生します。"too many arguments to method call, expect 2 have 3"

 UIColor *color = [UIColor blackColor];
        _nameField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Your Name" attributes:@{NSForegroundColorAttributeName: color},@{NSFontAttributeName:@"Roboto-Bold"}]; 

これは正常に動作します:

 UIColor *color = [UIColor blackColor];
        _nameField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Your Name" attributes:@{NSForegroundColorAttributeName: color}]; 
4

14 に答える 14

143

目的 C:

UIColor *color = [UIColor blackColor];    
someUITextField.attributedPlaceholder =
  [[NSAttributedString alloc] initWithString:@"Placeholder Text"
    attributes:@{
       NSForegroundColorAttributeName: color,
       NSFontAttributeName : [UIFont fontWithName:@"Roboto-Bold" size:17.0]
    }
  ];

dictionary(リテラルのキーと値のペアの間に括弧はありません。)

迅速:

let attributes = [
    NSForegroundColorAttributeName: UIColor.blackColor(),
    NSFontAttributeName : UIFont(name: "Roboto-Bold", size: 17)! // Note the !
]

someUITextField.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes:attributes)
于 2013-08-15T01:34:37.643 に答える
12

迅速な人々の便宜のために:

someTextField.attributedPlaceholder = NSAttributedString(string: "someString", 
attributes:[NSForegroundColorAttributeName: UIColor.lightGrayColor(), NSFontAttributeName: PlaceHolderFont])
于 2014-09-30T21:18:27.360 に答える
6

UITextField をサブクラス化し、次のメソッドをオーバーライドする必要があります:</p>

- (void)drawPlaceholderInRect:(CGRect)rect;

これが以下の実装です。

- (void)drawPlaceholderInRect:(CGRect)rect {
     NSDictionary *attributes = @{
                             NSForegroundColorAttributeName : [UIColor lightGrayColor],
                             NSFontAttributeName : [UIFont italicSystemFontOfSize:self.font.pointSize]
                             };
    // center vertically
    CGSize textSize = [self.placeholder sizeWithAttributes:attributes];
    CGFloat hdif = rect.size.height - textSize.height;
    hdif = MAX(0, hdif);
    rect.origin.y += ceil(hdif/2.0);
    [[self placeholder] drawInRect:rect withAttributes:attributes];
}

詳細については、ここをクリックして見つけることができます

于 2015-07-29T05:43:14.380 に答える
5

@ddevazの回答に感謝します。

UITextField サブクラス ソリューション

上記の答えはに最適ですUITextFieldしかし、UITextFieldサブクラスを使用して、その中でこのメソッドを実行しようとすると。その後、機能しません。

をサブクラス化する場合にのみ、他の解決策を見つけましたUITextFieldUITextFieldサブクラスで以下のメソッドをオーバーライドすると、それが機能します。

- (void) drawPlaceholderInRect:(CGRect)rect {
    NSDictionary *attrDictionary = @{
                                     NSForegroundColorAttributeName: [UIColor lightGrayColor],
                                     NSFontAttributeName : [UIFont fontWithName:@"Menlo" size:17.0]
                                     };

    [[self placeholder] drawInRect:rect withAttributes:attrDictionary];
}
于 2014-08-26T05:51:51.493 に答える
4

Swift 4 の作業バージョン

let attributes = [NSAttributedStringKey.foregroundColor: UIColor.black,
                      .font : UIFont.systemFont(ofSize: 14, weight: .regular)]

someTextfield.attributedPlaceholder = NSAttributedString(string: "Placeholder text", attributes:attributes)
于 2018-04-28T08:08:40.047 に答える
3

Swift 4 の更新

let attributes = [
    NSAttributedStringKey.foregroundColor: .black,
    NSAttributedStringKey.font : UIFont(name: "Your font name", size: 14)!
]

someTextfield.attributedPlaceholder = NSAttributedString(string: "Placeholder text", attributes:attributes)
于 2017-12-20T17:39:48.217 に答える
1

If you want to support both iOS 6 and previous versions then:

UIColor *placeholderColor = [UIColor lightTextColor];
UIFont *placeholderFont = [UIFont systemFontOfSize:[UIFont systemFontSize]];

if ([textField respondsToSelector:@selector(attributedPlaceholder)]) {
#ifdef __IPHONE_6_0
    textField.attributedPlaceholder = [[NSAttributedString alloc]
        initWithString:textField.placeholder attributes: // NOTE: textField.placeholder can't be nil
              @{ NSForegroundColorAttributeName : placeholderColor,
                 NSFontAttributeName : placeholderFont }];
#endif
} else { // for pre-iOS6
    [textField setValue:placeholderColor forKeyPath:@"_placeholderLabel.textColor"];
    [textField setValue:placeholderFont forKeyPath:@"_placeholderLabel.font"];
}
于 2014-10-15T12:12:40.700 に答える
0

以下のコードを使用できます。最初に、カスタム フォント用にシステムが受け入れたフォントの名前を見つけます。

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
        NSLog(@"%@", fontName);
    }
}

以下のコードを使用して、カスタムフォントでプレースホルダーを作成します

searchTextField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Where are you shopping?" attributes:@{NSFontAttributeName : font }];

それ以外の場合、フォントが見つからないために nil object[1] を取得する可能性があります

于 2015-10-28T09:51:16.883 に答える