NSMutableAttributedString

NSMutableAttributedString

我在设置此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/

10-10 20:46