Я не уверен, что я делаю неправильно.У меня есть NSTextView и я зарегистрирован в качестве делегата для его атрибута textStorage.Когда я получаю -textStorageDidProcessEditing:notification:
, я пытаюсь применить атрибуты к диапазонам символов в тексте.Это, безусловно, «что-то» для символов, но не то, что я ожидаю ... они просто исчезают!
Пример сильно перегруженного кода.Это должно гарантировать, что второй символ в текстовом поле всегда красный:
-(void)textStorageDidProcessEditing:(NSNotification *)notification {
NSTextStorage *textStorage = [textView textStorage];
if ([[textStorage string] length] > 1) {
NSColor *color = [NSColor redColor];
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:color, NSForegroundColorAttributeName, nil];
[textStorage setAttributes:attributes range:NSMakeRange(1, 1)];
}
}
Вместо этого, когда я набираю последовательность «abcdefg», я получаю «a», затем, когда я нажимаю «b», похоже, ничего не происходитзатем, когда я нажимаю "cdefg", печатание происходит как обычно, в результате чего конечный результат "acdefg" ... пропускается "b"!
Если я начинаю нажимать клавишу Backspace, мне приходится нажимать клавишу Backspace 7 раз,если «b» на самом деле есть, но просто не рисуется (курсор останавливается, так как удаляет «b», то на следующем забое удаляет «a», как и ожидалось).
Если я применяю атрибуты кнекоторый текст по умолчанию в представлении, использующий тот же -setAttributes:range:
метод до , когда представление отображается, тогда оно выполняется точно так, как я ожидаю.
Есть какие-нибудь подсказки?Похоже, довольно обычное использование NSTextStorageDelegate
:)
Я пытался вызвать -setNeedsDisplay
в текстовом поле, но безрезультатно.