0

我在设置 this 时的范围(我认为)有问题NSMutableAttributedString。谁能告诉我为什么这会使我的程序崩溃?在我看来是对的,但我显然错了!谢谢。

NSString *placeHolderString = @"USERNAME";
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
float spacing = 5.0f;

// crashes on this line
[attributedString addAttribute:NSKernAttributeName
                         value:@(spacing)
                         range:NSMakeRange(0, [placeHolderString length])];

self.userNameTextField.attributedPlaceholder = attributedString;
4

1 回答 1

2

我认为导致您的问题的原因是您从一开始就没有真正考虑到您placeholderString的问题。此外,您的 value 参数可以简单地使用numberWithFloat,因为应用程序会知道您一直在使用什么类型。

一旦您考虑了placeHolderString,您将使用 的长度attributeString,因为它现在只包含您的placeholderString. UITextField然后我们只需使用property复制包含您的属性的字符串attributedText

NSMutableAttributedString *attributeString = [[NSMutableAttributedString alloc] initWithString:placeHolderString];
float spacing = 5.0f;
[attributeString addAttribute:NSKernAttributeName
                        value:[NSNumber numberWithFloat:spacing]
                        range:(NSRange){0,[attributeString length]}];
userNameTextField.attributedText = [attributeString copy];

对于更多上下文,诸如NSUnderlineStyleAttributeName存在之类的属性,您可以使用NSMutableAttributedString. 有关选项,请参阅文档。

于 2014-08-16T02:48:07.830 回答