NSTextField处理输入键按键奇怪

时间:2011-01-18 19:41:52

标签: cocoa nstextfield

我确定我只是错误地使用它,但我正在做的是我有一个NSTextField,带有一个属性字符串,在其末尾有一些不同字体的文本字符。当用户单击文本字段时,末尾的文本应该消失,当用户完成文本编辑并从文本字段中删除焦点时,文本将被添加回他们输入的字符串的末尾。

当用户选项卡开箱即用,或点击窗口某处以从文本字段中移除焦点时,它工作正常。它唯一不起作用的是它们是否在文本框中点击“返回”键。在这种情况下,文本仍会添加到字符串的末尾,但它与字符串的其余部分使用相同的字体。

这是我的代码的相关部分。我已经验证了当我从一个字段中选择以及当我在字段中输入时,两个方法都以相同的顺序被调用。

- (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];
}

1 个答案:

答案 0 :(得分:0)

我不确定我做了什么,但是我改变了几个类中的一堆代码,现在一切正常。希望我知道我做了什么......