我确定我只是使用不正确,但我正在做的是我有一个带有属性字符串的 NSTextField,它的末尾有几个不同字体的文本字符。当用户单击文本字段时,末尾的文本应该消失,并且当用户完成对其文本的编辑并从文本字段中移除焦点时,文本将被添加回他们输入的字符串的末尾。
当用户开箱即用选项卡或单击窗口上的某处以从文本字段中移除焦点时,它工作正常。唯一不起作用的情况是他们在文本框中按了“返回”键。在这种情况下,文本仍会添加到其字符串的末尾,但它的字体与字符串的其余部分相同。
这是我的代码的相关部分。我已经验证,当我从字段中跳出时以及在字段中按 Enter 时,这两种方法都以相同的顺序被调用。
- (void) selectText:(id)sender
{
[titleText setStringValue: [NSString stringWithFormat:@"%@", userEditableText]];
}
- (void) textDidEndEditing:(NSNotification *)notification
{
userEditableText = [textField stringValue];
NSString* fullText = [NSString stringWithFormat:@"%@ (%@)", userEditableText, nonUserEditableText];
NSRange range1;
range1.location = 0;
range1.length = [userEditableText length] - ([nonUserEditableText length] + 2);
NSRange range2;
range2.location = range1.length;
range2.length = ([[nonUserEditableText length] length] + 2);
NSRange range3;
range3.location = 0;
range3.length = [fullText length];
NSFont *font = [NSFont fontWithName:@"Arial" size:14.0];
NSMutableDictionary* stringAttributes = [[NSMutableDictionary alloc] init];
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:fullText attributes:stringAttributes];
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
[paragraphStyle setLineBreakMode:NSLineBreakByTruncatingMiddle];
[attrString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range1];
[attrString addAttribute:NSFontAttributeName value:font range:range2];
[textField setAttributedStringValue:attrString];
}