Как сделать поле NSText с левым или правым индикатором для проверки? - PullRequest
0 голосов
/ 28 апреля 2019

Мне нужно создать собственный NSTextField с таким индикатором:

https://i.stack.imgur.com/LAhfA.png

Справа вы можете увидеть значок индикатора.

Чтокод Мне нужно сделать это?

Спасибо за все.

РЕДАКТИРОВАТЬ

Текст никогда не может перекрывать значок.Значок не всегда отображается, но его можно показать, когда он пишется и когда текст правильный, этот текст также должен занимать положение значка.

1 Ответ

1 голос
/ 29 апреля 2019

Элемент управления текстового поля - это вид, в котором все чертежи выполняются с помощью NSTextFieldCell.То, что вам нужно сделать, это подкласс NSTextFieldCell и настроить чертеж.Посмотрите на API NSCell, и вы увидите, что есть метод drawWithFrame:inView:, который выполняет рисование всего поля.Различные другие методы NSCell используются в этом процессе.

К сожалению, некоторые из того, как рисование сделано, немного приватно и не легкомысленно, но главное - drawWithFrame:inView: нарисует фон и затем вызоветdrawInteriorWithFrame:inView: чтобы нарисовать текст.Вдобавок ко всему, я не могу вспомнить, использует ли NSTextFieldCell titleRectForBounds: для определения границ текста, но я уверен, что это так.Таким образом, вы можете переопределить это, чтобы вернуть более узкий прямоугольник, оставляя место для рисования значка проверки с помощью самой ячейки или использования подпредставления.

Кроме того, вам необходимо настроить границы, в которых поле NSTextViewредактор рисует и редактирует текст, иначе, когда вы просматриваете поле, когда оно не является первым респондентом, оно будет выглядеть хорошо, но когда вы редактируете текст поля, оно будет перекрывать значок.Для этого вам может понадобиться настроить кадр, заданный на editWithFrame:inView:editor:delegate:event:.

. Всегда немного сложно настраивать текстовые поля, потому что требуется время, чтобы найти все используемые методы и пути кода, но это сутьчто тебе нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...