我在设置此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;
最佳答案
我认为引起您问题的原因是,您从来没有真正考虑过placeholderString
。另外,您的value参数可以简单地使用numberWithFloat
,因为应用程序随后将始终知道您使用的是哪种类型。
一旦确定了placeHolderString
,就将使用attributeString
的长度,因为它现在仅包含placeholderString
的内容。然后,我们只需使用UITextField
属性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
做一些真正强大的事情。有关选项,请参阅文档。关于ios - NSMutableAttributedString崩溃应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25336462/