更改UITextField占位符字体

Bob*_*suk 52 objective-c uitextfield ios

我正在使用以下代码更改占位符文本颜色,但是当我尝试添加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"}]; 
Run Code Online (Sandbox Code Playgroud)

这工作正常:

 UIColor *color = [UIColor blackColor];
        _nameField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:@"Your Name" attributes:@{NSForegroundColorAttributeName: color}]; 
Run Code Online (Sandbox Code Playgroud)

dde*_*vaz 132

Objective-C的:

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

(文字dictionary键值对之间没有括号.)

迅速:

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

someUITextField.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes:attributes)
Run Code Online (Sandbox Code Playgroud)

  • NSFontAttributeName需要一个UIFont对象,而不是一个字符串.您需要使用类似NSFontAttributeName的东西:[UIFont fontWithName:@"Roboto-Bold"尺寸:17.0] (4认同)
  • 这改变了我的颜色,但没有改变字体. (3认同)

aya*_*aya 21

Swift 4.x更新:

textField.attributedPlaceholder = NSAttributedString(string: "Placeholder Text", attributes: [
    .foregroundColor: UIColor.lightGray,
    .font: UIFont.boldSystemFont(ofSize: 14.0)
])
Run Code Online (Sandbox Code Playgroud)


har*_*hoo 8

为了方便快捷的人:

someTextField.attributedPlaceholder = NSAttributedString(string: "someString", 
attributes:[NSForegroundColorAttributeName: UIColor.lightGrayColor(), NSFontAttributeName: PlaceHolderFont])
Run Code Online (Sandbox Code Playgroud)


tia*_*lin 6

您应该继承UITextField,并覆盖以下方法:

- (void)drawPlaceholderInRect:(CGRect)rect;
Run Code Online (Sandbox Code Playgroud)

以下是以下实现:

- (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];
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请单击此处


Kam*_*pai 5

感谢@ddevaz 的回答。

UITextField 子类解决方案

以上答案适用于UITextField. 但是当我使用UITextField子类并尝试在其中执行此方法时。然后它不工作。

仅当您将UITextField. 在您的UITextField子类中覆盖以下方法,它将为您完成工作。

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

    [[self placeholder] drawInRect:rect withAttributes:attrDictionary];
}
Run Code Online (Sandbox Code Playgroud)