8

我正在尝试将 Attributed 字符串放入 NSTextField 中,该字符串本身位于 NSAlert 中 这是我的代码:

NSTextField *label1 = [[NSTextField alloc]initWithFrame:NSMakeRect(0, 23, 50, 20)];
[label1 setEditable:FALSE];
[label1 setAllowsEditingTextAttributes:TRUE];
[label1 setBezeled:FALSE];
label1.backgroundColor = [NSColor clearColor];
NSString *login = @"Username";
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:login];
NSString *boldFontName = [[NSFont boldSystemFontOfSize:12] fontName];
[attrString beginEditing];
NSRange ran = NSMakeRange(0, 8);
[attrString addAttribute:NSFontAttributeName
                   value:boldFontName
                   range:ran];

[attrString endEditing];
NSLog(@"%@",attrString);
[label1 setAttributedStringValue:attrString];
[alert setAccessoryView:label1];
[alert runModal];

但是,一旦调用 [alert runModal],我的应用程序就会崩溃

"[__NSCFConstantString pointSize]: unrecognized selector sent to instance 0x7fff74035bb0"

我不确定为什么会这样。看来它与字符串有关,因为只要我删除 [alert setAccessoryView:label1] 或给 label1 一个标准的 nsstring,它就可以正常工作。请帮忙!

4

2 回答 2

38

你做得对。但是你犯了一个小错误。您已NSString作为属性传递,NSFontAttributeName但它期望NSFont.

尝试这个。

    NSFont *boldFontName = [NSFont boldSystemFontOfSize:12];
[attrString beginEditing];
NSRange ran = NSMakeRange(0, 8);
[attrString addAttribute:NSFontAttributeName
                   value:boldFontName
                   range:ran];
于 2012-12-22T09:24:34.100 回答
1

上面的答案是绝对正确的。我遇到了同样的崩溃,它曾经只在 iOS 7.0.3 和 7.0.4 中崩溃,并且在所有其他版本中都能完美运行。经过这么多调查,我才知道@"HelveticaNeue-Italic" 在 iOS 7.0.3 和 7.0.4 版本中不可用,所以我曾经在这些版本中遇到过崩溃。

我已经用下面的代码解决了这个问题:

self.headerFont = [UIFont fontWithName:@"HelveticaNeue-Italic" size:16.0f];
if (self.headerFont == nil) {
    self.headerFont = [UIFont fontWithName:@"HelveticaNeue" size:16.0f];
}
于 2014-07-30T09:15:21.867 回答