UITextField的attributesPlaceholder无效

Sal*_*uts 14 uitextfield nsattributedstring ios

我试图在我的文本字段中使用占位符斜体,并且由于我的应用程序是针对iOS 6.0或更新版本,因此决定使用attributedPlaceholder属性而不是滚动更自定义的内容.代码如下:

NSString *plString = @"optional";
NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:plString
        attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:15]}];
for (UITextField *t in myTextfields){
    t.placeholder = plString;
    t.attributedPlaceholder = placeholder;
}
Run Code Online (Sandbox Code Playgroud)

然而占位符的样式仍然不是斜体,而是与常规文本相同,只是更暗淡.我缺少什么才能完成这项NSAttributedString工作?

Mik*_*ike 17

正如沃伦所指出的那样,造型目前无法按照你的方式完成.一个好的解决方法是按照您希望占位符查看的方式设置文本字段的字体属性,然后在用户开始键入时更改文本字段的字体.看起来像占位符和文本是不同的字体.

您可以通过创建文本字段的委托并使用如下的shouldChangeCharactersinRange来完成此操作:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{    
    // If there is text in the text field
    if (textField.text.length + (string.length - range.length) > 0) {
        // Set textfield font
        textField.font = [UIFont fontWithName:@"Font" size:14];
    } else {
        // Set textfield placeholder font (or so it appears)
        textField.font = [UIFont fontWithName:@"PlaceholderFont" size:14];
    }

    return YES;
}
Run Code Online (Sandbox Code Playgroud)


war*_*enm 10

这几乎肯定是一个错误.该属性文档attributedPlaceholder声称,无论前景色属性如何,都将使用灰色绘制字符串,但情况并非如此:您可以设置前景色和背景色.不幸的是,font属性似乎被剥离并恢复为系统字体.

作为一种解决方法,我建议您drawPlaceholderInRect:自己覆盖并绘制占位符.此外,您应该在此处提交Radar并包含一个演示该错误的最小示例项目.


XCo*_*ool 8

我自己偶然发现了这个问题.显然,占位符将采用文本字段分配的任何字体.只需设置textfield的字体就可以了.

对于其他一切,比如占位符的颜色,我还是会回去 attributedPlaceholder