Обработка NSTextField Клавиша Enter нажимает странно - PullRequest
0 голосов
/ 18 января 2011

Я уверен, что я просто неправильно его использую, но у меня есть 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 голосов
/ 19 января 2011

Не уверен, что именно я сделал, но я изменил кучу кода в нескольких классах, и теперь все работает правильно. Жаль, что я не знал, что я сделал ...

...