2015-10-14 2 views
0

Я могу установить число доступных ссылок на NSTextField элементах, используя NSAttributedString. Текст отображается правильно (синий, подчеркнутый), как только появится представление.NSTextField неверный указатель до сфокусированного

Однако курсор показывается при наведении курсора редактирования (I-Beam) до первого щелчка (в любом месте) на NSTextField. Как только он нажимается, при зависании над «гиперссылкой» части текста курсор указывает, как ожидается.

Я смог подкласса NSTextField и переопределить resetCursorRects, однако это позволяет мне менять курсор для всей привязки NSTextField, где я хочу, чтобы он показывался только при наведении на гиперссылки частей текста (или для использования cursorRects, но это кажется излишним, итерации на (уже итерации по созданию) целым текстом).

Я также попытался установить атрибут NSCursor атрибутной строки, но это не решило проблему.

+0

Похоже, что NSTextView показывает правильный курсор, а NSTextField - нет. – Willeke

ответ

3

Это не поддерживается напрямую NSTextField, я считаю. Он начинает работать, когда вы нажимаете в текстовом поле, потому что в этот момент создается редактор полей для текстового поля; редактор полей - NSTextView, и это делает то, что вы хотите. Таким образом, у вас в основном есть два варианта. Вы можете (1) сделать легкую вещь и использовать NSTextView вместо NSTextField (есть ли какая-то особая причина, почему вы не можете?), Или (2) вы можете настроить правильный курсор самостоятельно в resetCursorRects, перейдя через прямоугольники для диапазоны символов, которые имеют атрибут link, но это означает настройку менеджера макета и т. д. - работа, которая для вас сделана, если вы используете NSTextView. Третья возможность заключается в том, чтобы заставить редактор полей текстового поля сразу же подойти, прежде чем пользователь нажмет - другими словами, сделайте текстовое поле первым ответчиком. Но это работает только в том случае, если у вас есть только одно такое текстовое поле в вашем окне, и если ничто в окне никогда не хочет быть первым ответчиком, значит, это не очень удовлетворительное исправление.

Смежные вопросы