У меня NSTextView
в NSScrollView
, и я программно вставляю подкласс NSView
как подпредставление NSTextView
. Этот NSView
действует как наложение, накладывая графическую информацию о тексте под ним.
Я думал, что это работает достаточно хорошо, пока не заметил, что текстовое представление не реагирует на щелчки правой кнопкой мыши. Другие операции (редактирование, выделение) работают нормально.
Кроме того, если первый респондент изменен на родственника представления прокрутки (например, представление структуры), текстовое представление не восстанавливает статус первого респондента после щелчка по нему. Выбор изменится в ответ на щелчок, но выделение выделения будет серым, а не синим (что указывает на то, что текстовое представление не является первым респондентом).
Если я смещу фрейм наложения subview, текстовое представление ведет себя на 100% нормально в области, не перекрытой наложением, но перекрывающаяся область ведет себя неправильно, как описано выше.
Действия по воспроизведению этого поведения в Mac OS X 10.6.4:
- Создайте простое старое приложение Какао, не основанное на документах.
- Добавьте IBOutlet NSTextView в делегат приложения .h.
- Добавьте
NSTextView
в окно в MainMenu.xib. Подключите розетку textView. - Введите немного кода:
In applicationDidFinishLaunching:
NSView *overlay = [[NSView alloc] initWithFrame:textView.bounds];
[textView addSubview:overlay];
[overlay release];
Запустите приложение и обратите внимание, что щелчок правой кнопкой мыши в текстовой области не работает должным образом, но вы все равно можете взаимодействовать с текстовым представлением.
Затем добавьте NSOutlineView в окно в xib. Обратите внимание, что как только фокус покидает текстовую область (если вы щелкнете по представлению структуры) с наложением, вы не сможете вернуть фокус обратно к текстовому представлению (он больше не станет первым респондентом).
Есть ли способ разрешить NSTextView
получать все свои события, даже если мой NSView
оверлей не принимает события первого респондента или мыши? Я подозреваю, что это может быть связано с редактором поля - возможно, он игнорирует события, которые, по его мнению, предназначены для представления наложения?